精彩視頻回顧請點擊:MaxCompute Information Schema 詳解
以下為精彩視頻內容整理:
1.Information Schema簡介;
2.Information Schema安裝使用;
3.Information Schema常用場景;
4.Information Schema使用建議。
一、Information Schema簡介
(一)背景
MaxCompute是一種快速、完全託管的PB/EB級數據倉庫解決方案。用戶結構化的數據在MaxCompute中以行-列表的的形式存儲,每天有千萬級別的作業對這些表進行操作,同時有豐富完整的權限控制體系對這些資源訪問進行約束控制。為了滿足這些海量對象以及對象之間關係的管理、分析需求,MaxCompute提供了開放的元數據服務Information Schema。通過Information Schema用戶可以對MaxCompute中管理的對象使用SQL進行全局分析,可以分析用戶數據訪問行為等,也可以利用這些數據構建自己的內部的元數據管理系統。
MaxCompute的Information Schema提供了項目元數據及使用歷史數據等信息。在ANSI SQL-92的Information Schema基礎上,添加了面向MaxCompute服務特有的字段及視圖。包含了22張視圖,其中20張是基礎對象及對象關係視圖,2張是歷史記錄數據。
(二)數據產出
產出方式週期性離線+實時在線結合的方式進行數據產出。產出流程涉及多個系統,數據是存儲在ODPS系統上確保數據可靠性。通過ODPS package+view的機制提供給用戶,視圖是project級別的。information schema數據安全依託ODPS已有的成熟安全機制。數據覆蓋面廣,對象關係進行展開,使用方便簡單。
(三)Package+View機制
(1)什麼是view
基於 SQL 語句的結果集的可視化的表,包含行和列就像一個真實的表。通過視圖我們可以向用戶選擇性、穩定地提供數據,隱藏複雜的實現細節。
(2)什麼是PACKAGE
Package是一種跨項目空間共享數據及資源的機制,我們可以把資源放到package中打包一起共享給其他project使用,相當於功能包。
(3)為什麼要用PACKAGE
第一,共享簡單,管理方便。不需要逐張view進行授權,後續對InformationSchema內容不需要額外授權操作。第二,安全,不需要管理龐大的用戶,只需要對project進行授權。只需要授權project安裝後,由project owner管理project內部誰能訪問。
(四)視圖信息
在上文中提到,InformationSchema包含了22張視圖,其中20張是基礎對象及對象關係視圖,2張是歷史記錄數據。如下圖所示,列出了這22張表,它們大概可以分為四類,其中只有歷史數據表是帶有分區字段ds,其他都為非分區表。
二、Information Schema安裝使用
(一)安裝
使用odpscmd或者DataWorks,注意需要PROJECT OWNER/SUPER ADMIN權限的執行。
如果需要project裡面其他非project owner、super admin能使用information schema,可以通過ACL或者policy授權。
第一次使用時候由於字段不對,類型不對或者沒有目標表權限等等會出現類似如下錯誤。
FAILED: No 'Read' permission for entity 'projects/information_schema/registration/functions/udf_unixtime2str': Authorization Failed [4002], You don't exist in project information_schema. Context ID:353dbeb8-9798-4a3f-8c9f-c5aa0faed66f. --->Tips: CurrentProject:lightning; Pricipal:[email protected]; No permission 'odps:Read' on resouce acs:odps:*:projects/information_schema/registration/functions/udf_unixtime2str
從query可能看不出來什麼,有時候用戶就是insert overwrite table xxx select * from information_schema.tasks_history。
Q:為什麼只是訪問information_schema所有表出錯?
A:因為部分視圖使用了udf,也有用戶部分表的schema是對的,比如只有history錶帶有分區ds字段,其他表是沒有的。
(二)使用限制
(1)Information Schema提供的是當前項目的元數據視圖,不支持跨項目的元數據訪問。如果需要對多個項目的元數據進行統一查詢、分析,需要分別獲取各個項目中的元數據並整合在一起進行跨項目元數據分析。
(2)元數據系統表目前提供視圖有一定時延,對元數據時效性要求較高的應用,建議使用SDK/CLI直接獲取指定對象的元數據。
(3)歷史數據視圖目前只提供14天數據,其他數據為最近產出副本,如果需要長期分析,需要定期導出到用戶空間。
(4)視圖數據不支持tunnel等拷貝,需要執行odps sql。
三、InformationSchema常用場景
在上文中提到,InformationSchema包含了22張視圖,下面對其中一部分視圖的常用場景分別作介紹。
(一)TABLES、PARTITIONS
(二)TASKS_HISTORY
(三)TUNNELS_HISTORY
(四)其它常用場景
四、Information Schema使用建議
(一)禁止掉SQL 1.0回退set odps.sql.planner.mode=lot;
(二)adhoc查詢歷史表使用時候加上分區限制避免掃描所有的分區,如果是查詢昨天以及之前的數據會更快,因為歷史表是歷史數據和當天實時數據的聚合,歷史數據會定期進行range cluster,進行過濾時候掃描量更小。
(三)定期dump時候不要將時間剛剛好設置為0點,因為產出時間是有一定的延遲,可以考慮設置晚幾十分鐘。
(四)多個project數據時候可以通過設置二級分區(string ds, string project),每個項目insert overwrite到自己分區,查詢時候可以通過指定ds查詢主賬號下project數據。
(五)儘量不要用select* , 類似insert into table xxxx select * from information_schema.tables,因為視圖可能會在尾部進行字段擴展。
(六)使用權限表時候查詢用戶權限時候注意不要遺漏“all”,對應權限*,比如查詢用戶drop權限時候,過濾列表除了drop還要含有all。
大家如果對MaxCompute有更多諮詢或者建議,歡迎掃碼加入 MaxCompute開發者社區釘釘群,或點擊鏈接 申請加入。