本文介紹了MaxCompute的中繼資料服務Information Schema服務的基本概念、操作使用以及使用限制。
MaxCompute的Information Schema提供了專案中繼資料及使用歷史資料等資訊。在ANSI SQL-92的Information Schema基礎上,添加了面向MaxCompute服務特有的欄位及視圖。MaxCompute提供了名稱為Information Schema的公用專案,通過訪問該公用專案提供的唯讀視圖,可以查詢到使用者專案的中繼資料資訊及使用歷史資訊。
使用限制
Information Schema提供的是當前專案的中繼資料視圖,不支援跨專案的中繼資料訪問。如果需要對多重專案的中繼資料進行統一查詢、分析,需要分別擷取各個專案中的中繼資料並整合在一起進行跨專案中繼資料分析。
中繼資料系統資料表目前提供准即時視圖,對中繼資料時效性要求較高的應用,建議使用SDK/CLI直接擷取指定對象的中繼資料。
中繼資料及作業歷史資料儲存在Information Schema空間下,如果需要對歷史資料進行快照備份或獲得超過14天的作業歷史,您可以定期將Information Schema的資料備份到指定專案。
擷取Information Schema服務
自2024年03月01日開始,MaxCompute停止對新增專案自動安裝專案層級Information Schema,即新增的專案預設沒有專案層級Information Schema的Package。若您有查中繼資料的業務,您可以查詢租戶層級的Information Schema,以便擷取更全的資訊。租戶層級Information Schema的具體使用說明請參見租戶層級Information Schema。
對於存量MaxCompute專案,在您開始使用Information Schema服務前,需要以專案所有者(Project Owner)或具備Super_Administrator管理角色的RAM使用者身份安裝Information Schema許可權包,獲得訪問專案中繼資料的許可權。更多為使用者授權管理角色操作資訊,請參見將角色賦予使用者。安裝方式有如下兩種:
登入MaxCompute用戶端,執行如下命令:
install package Information_Schema.systables;
登入DataWorks控制台,進入臨時查詢介面。更多臨時查詢操作詳情,請參見使用臨時查詢運行SQL語句(可選)。執行如下命令:
install package Information_Schema.systables;
Package安裝成功後,當前操作所在專案即獲得了通過Information Schema查詢本專案相關中繼資料的許可權。資料儲存在Information Schema專案內,無需為中繼資料存放區付費。
執行如下命令,可以查看Information Schema所提供的視圖列表。
odps@myproject1> describe package Information_Schema.systables;
查詢結果如下圖。
查詢中繼資料視圖
查詢中繼資料視圖時,需要在視圖名稱前指定專案Information Schema,即Information Schema.view_name。
例如,您登入訪問的當前專案為myproject1,在myproject1中,執行如下命令查詢當前myproject1中所有表的中繼資料資訊。
odps@myproject1>select * from Information_Schema.tables;
Information Schema同時也包含了作業歷史視圖,可以查詢到當前專案內的作業歷史資訊。使用時可添加日期分區進行過濾,請參見如下命令。
odps@myproject1>select * from Information_Schema.tasks_history where ds='yyyymmdd' limit 100;
訪問授權
Information Schema的視圖包含了專案層級的所有使用者資料,預設專案所有者可以查看。如果專案內其他使用者或角色需要查看,需要進行授權,請參見基於Package跨專案訪問資源。
授權文法如下。
grant <actions> on package Information_Schema.systables to user <user_name>;
grant <actions> on package Information_Schema.systables to role <role_name>;
actions:待授予的操作許可權,取值為Read。
user_name:已添加至專案中的阿里雲帳號或RAM使用者。
您可以通過MaxCompute用戶端執行
list users;
命令擷取使用者帳號。role_name:已添加至專案中的角色。
您可以通過MaxCompute用戶端執行
list roles;
命令擷取角色名稱。
授權樣本如下。
grant read on package Information_Schema.systables to user RAM$Bob@aliyun.com:user01;
中繼資料視圖列表
藉助Information_Schema中繼資料視圖,您可以瀏覽和檢索中繼資料。
藉助Information_Schema使用資訊視圖,您可以對作業的運行情況,例如資源消耗、運行時間長度、資料處理量等指標進行分析,用於最佳化作業或規劃資源容量。
不同視圖存在不同的時效性或系統預設的保留周期,超過保留周期的資料將無法訪問。您可以手工從Information_Schema周期性匯出資料到本地表中,備份更長周期的歷史資料。
費用說明如下。
對於使用隨用隨付計算資源的專案,針對Information Schema視圖的查詢會產生查詢費用,查詢檢視的SQL產生的費用按視圖底層展開的SQL進行計費。Information Schema視圖為了提升查詢效能底層統一通過
Range聚簇表
進行最佳化,減少查詢輸入量。如果您查詢TASKS_HISTORY和TUNNELS_HISTORY這兩個視圖,請在每天6:00:00後查詢前一天資料,避免查詢當天的資料,可最大程度減少輸入量從而降低查詢費用。對於使用訂用帳戶計算資源的專案,查詢Information Schema視圖時會消耗您購買的CU。
您不需要為Information Schema視圖支付儲存費用。
匯出資料時,建議顯性地選擇視圖的欄位名稱,盡量避免使用insert into select * from information_schema.***
的方式匯出資料,防止新增欄位後導致備份失敗。
中繼資料視圖列表如下。
分類 | 視圖 | 時效性/保留周期 | 延遲說明 |
中繼資料資訊 | 准即時視圖 | 與線上資料存在一定延遲,延遲時間為3小時左右。 | |
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
准即時視圖 | |||
使用資訊 | 運行中作業的即時快照 | 與線上資料存在秒級延遲,當前處於內測(Preview)中,無SLA保障,後續會逐步開放。 | |
准即時視圖,分區表,保留最近14天明細 | 與線上資料存在一定延遲,延遲時間為3小時左右。 | ||
准即時視圖,分區表,保留最近14天明細 |
TABLES
專案空間下的表資訊。
欄位 | 類型 | 值 |
table_catalog | STRING | 固定值 |
table_schema | STRING | 專案空間名稱。 |
table_name | STRING | 表名。 |
table_type | STRING | 表類型。取值範圍:
|
is_partitioned | BOOLEAN | 是否是分區表。 |
owner_id | STRING | 表所有者的ID。 |
owner_name | STRING | 可選。表所有者的雲帳號名稱。 |
create_time | DATETIME | 表的建立時間。 |
last_modified_time | DATETIME | 表的資料最後更新時間。 |
data_length | BIGINT | 如果表為非分區表,值為表的資料量大小。如果表為分區表,系統不會計算表的資料量大小,值為NULL。PARTITIONS視圖中包含分區表各個分區的資料量大小。單位:位元組(Byte)。 |
table_comment | STRING | 表的注釋。 |
life_cycle | BIGINT | 可選。生命週期。 |
is_archived | BOOLEAN | 預留欄位,無意義。 |
table_exstore_type | STRING | 預留欄位,無意義。 |
cluster_type | STRING | MaxCompute表的分桶(Clustering)類型。取值為HASH或RANGE。 |
number_buckets | BIGINT | 可選欄位,Cluster表的Bucket數目,0表示作業執行時動態決定。 |
view_original_text | STRING | VIRTUAL_VIEW類型表的view text。 |
PARTITIONS
專案空間下的表分區資訊。
欄位 | 類型 | 值 |
table_catalog | STRING | 固定值 |
table_schema | STRING | 專案名稱。 |
table_name | STRING | 表名。 |
partition_name | STRING | 分區名。例如 |
create_time | DATETIME | 分區的建立時間。 |
last_modified_time | DATETIME | 表的最後更新時間。 |
data_length | BIGINT | 分區的資料量大小。單位:位元組(Byte)。 |
is_archived | BOOLEAN | 預留欄位,無意義。 |
is_exstore | BOOLEAN | 預留欄位,無意義。 |
cluster_type | STRING | 可選欄位。MaxCompute表的分桶(Clustering)類型。取值為HASH或RANGE。 |
number_buckets | BIGINT | 可選欄位,Cluster表的Bucket數目。0表示作業執行時動態決定。 |
COLUMNS
描述專案空間下的表欄位資訊。
欄位 | 類型 | 值 |
table_catalog | STRING | 固定值 |
table_schema | STRING | 專案名稱。 |
table_name | STRING | 表名。 |
column_name | STRING | 列名。 |
ordinal_position | BIGINT | 列序號。 |
column_default | STRING | 欄位預設值。 |
is_nullable | BOOLEAN | 可選欄位。始終為YES。 |
data_type | STRING | 資料類型。 |
column_comment | STRING | 列注釋。 |
is_partition_key | BOOLEAN | 是否是分區鍵。 |
UDFS
專案空間下的UDF資訊。
欄位 | 類型 | 值 |
udf_catalog | STRING | 固定值 |
udf_schema | STRING | 專案名稱。 |
udf_name | STRING | UDF名稱。 |
owner_id | STRING | UDF擁有者的ID。 |
owner_name | STRING | 可選欄位,UDF擁有者的雲帳號名稱。 |
create_time | DATETIME | UDF的建立時間。 |
last_modified_time | DATETIME | UDF的最後修改時間。 |
RESOURCES
專案空間下的資源資訊。
欄位 | 類型 | 值 |
resource_catalog | STRING | 固定值 |
resource_schema | STRING | 專案的名稱。 |
resource_name | STRING | 資源名。 |
resource_type | STRING | 資源類型。取值為Py或Jar。 |
owner_id | STRING | 資源所有者的ID。 |
owner_name | STRING | 可選欄位,資源所有者的雲帳號名稱。 |
create_time | DATETIME | 資源的建立時間。 |
last_modified_time | DATETIME | 資源的最後修改時間。 |
size | BIGINT | 資源佔用的儲存空間。 |
comment | STRING | 資源的注釋。 |
is_temp_resource | BOOLEAN | 是否是臨時資源。 |
UDF_RESOURCES
專案空間下UDF的資源依賴。
欄位 | 類型 | 值 |
udf_catalog | STRING | 固定值 |
udf_schema | STRING | 專案名稱。 |
udf_name | STRING | UDF名稱。 |
resource_schema | STRING | 資源所在的專案。 |
resource_name | STRING | 資源名。 |
USERS
專案空間下的使用者列表。
欄位 | 類型 | 值 |
user_catalog | STRING | 取值為ALIYUN或RAM。 |
user_schema | STRING | 專案名稱。 |
user_name | STRING | 可選欄位,使用者名稱。 |
user_id | STRING | 使用者ID。 |
user_label | STRING | 使用者標籤。 |
ROLES
專案空間下的角色列表。
欄位 | 類型 | 值 |
role_catalog | STRING | 固定值 |
role_schema | STRING | 專案名稱。 |
role_name | STRING | 角色名稱。 |
role_label | STRING | 角色標籤。 |
comment | STRING | 角色的注釋。 |
USER_ROLES
專案空間下使用者擁有的角色資訊。
欄位 | 類型 | 值 |
user_role_catalog | STRING | 固定值 |
user_role_schema | STRING | 專案名稱。 |
role_name | STRING | 角色名稱。 |
user_name | STRING | 使用者名稱。 |
user_id | STRING | 使用者的ID。 |
PACKAGE_OBJECTS
專案空間下Package中的對象資訊。
欄位 | 類型 | 值 |
package_catalog | STRING | 固定值 |
package_schema | STRING | 專案名稱。 |
package_name | STRING | Package名稱。 |
object_type | STRING | Package內成員的類型。 |
object_name | STRING | Package內成員的名字。 |
column_name | STRING | 表的列名。 |
allowed_privileges | VECTOR<STRING> | 共用的許可權。 |
allowed_label | STRING | 共用的標籤。 |
INSTALLED_PACKAGES
專案空間下已安裝的Package資訊。
欄位 | 類型 | 值 |
installed_package_catalog | STRING | 固定值 |
installed_package_schema | STRING | 專案名稱。 |
package_project | STRING | 建立Package的專案空間名稱。 |
package_name | STRING | Package名稱。 |
installed_time | DATETIME | 安裝時間(預留欄位)。 |
allowed_label | STRING | 共用的標籤。 |
SCHEMA_PRIVILEGES
專案空間下SCHEMA的許可權資訊。
欄位 | 類型 | 值 |
user_catalog | STRING | 固定值 |
user_schema | STRING | 專案名稱。 |
grantee | STRING | 使用者名稱。 |
user_id | STRING | 賬戶ID。 |
grantor | STRING | 授權者帳號,當前值為NULL。 |
privilege_type | STRING | 權限類別型。 |
TABLE_PRIVILEGES
專案空間下表的許可權資訊。
欄位 | 類型 | 值 |
table_catalog | STRING | 固定值 |
table_schema | STRING | 表所在的專案名稱。 |
table_name | STRING | 表名。 |
grantee | STRING | 使用者名稱。 |
user_id | STRING | 賬戶ID。 |
grantor | STRING | 授權者帳號,當前值為NULL。 |
privilege_type | STRING | 權限類別型。 |
user_schema | STRING | 使用者所在的專案名稱。 |
COLUMN_PRIVILEGES
專案空間下表欄位級的許可權資訊。
欄位 | 類型 | 值 |
table_catalog | STRING | 固定值 |
table_schema | STRING | 表所在的專案名稱。 |
table_name | STRING | 表名。 |
column_name | STRING | 列名。 |
grantee | STRING | 使用者名稱。 |
user_id | STRING | 賬戶ID。 |
grantor | STRING | 可選欄位。目前為NULL。 |
privilege_type | STRING | 權限類別型。 |
user_schema | STRING | 使用者所在的專案名稱。 |
UDF_PRIVILEGES
專案空間下UDF的許可權資訊。
欄位 | 類型 | 值 |
udf_catalog | STRING | 固定值 |
udf_schema | STRING | 專案名稱。 |
udf_name | STRING | UDF名稱。 |
user_schema | STRING | 使用者所在的專案名稱。 |
grantee | STRING | 使用者名稱。 |
user_id | STRING | 賬戶ID。 |
grantor | STRING | 授權者帳號,當前值為NULL。 |
privilege_type | STRING | 權限類別型。 |
RESOURCE_PRIVILEGES
專案空間下資源的許可權資訊。
欄位 | 類型 | 值 |
resource_catalog | STRING | 固定值 |
resource_schema | STRING | 專案名稱。 |
resource_name | STRING | 資源名稱。 |
user_schema | STRING | 使用者所在專案空間。 |
grantee | STRING | 使用者名稱。 |
user_id | STRING | 賬戶ID。 |
grantor | STRING | 授權者帳號,當前值為NULL。 |
privilege_type | STRING | 權限類別型。 |
TABLE_LABELS
專案空間下表的LABEL資訊。
欄位 | 類型 | 值 |
table_catalog | STRING | 固定值 |
table_schema | STRING | 專案名稱。 |
table_name | STRING | 表名。 |
label_type | STRING | 標籤類型(始終為NULL)。 |
label_level | STRING | 標籤等級。 |
COLUMN_LABELS
專案空間下表欄位級的LABEL資訊。
欄位 | 類型 | 值 |
table_catalog | STRING | 固定值 |
table_schema | STRING | 專案名稱。 |
table_name | STRING | 表名。 |
column_name | STRING | 欄位名。 |
label_type | STRING | 標籤類型(始終為NULL)。 |
label_level | STRING | 標籤等級。 |
TABLE_LABEL_GRANTS
專案空間下表的LABEL授權資訊。
欄位 | 類型 | 值 |
table_label_grant_catalog | STRING | 固定值 |
table_label_grant_schema | STRING | 使用者所在的專案名稱。 |
user | STRING | 使用者名稱稱。 |
user_id | STRING | 使用者的ID。 |
table_schema | STRING | 表所在的專案名稱。 |
table_name | STRING | 表名。 |
grantor | STRING | 授權者帳號,當前值為NULL。 |
label_level | STRING | 授予的標籤等級。 |
expired | DATETIME | 到期時間。 |
COLUMN_LABEL_GRANTS
專案空間下表欄位的LABEL授權資訊。
欄位 | 類型 | 值 |
column_label_grant_catalog | STRING | 固定值 |
column_label_grant_schema | STRING | 使用者所在專案名稱。 |
user | STRING | 使用者名稱稱。 |
user_id | STRING | 使用者的ID。 |
table_schema | STRING | 表所在的專案名稱。 |
table_name | STRING | 表名。 |
column_name | STRING | 欄位名。 |
grantor | STRING | 授權者帳號,當前值為NULL。 |
label_level | STRING | 授予的標籤等級。 |
expired | DATETIME | 到期時間。 |
TASKS
作業即時快照,用於即時監控作業。
TASKS視圖當前處於內測發布狀態,存在欄位和欄位內容變更的可能,無SLA保障,請您謹慎使用。後續發布狀態變更請關注公告。
欄位 | 類型 | 值 |
project_name | STRING | 專案名稱。 |
task_name | STRING | 作業名稱。 |
task_type | STRING | 作業類型。 作業類型取值如下:
|
inst_id | STRING | 執行個體ID。 |
status | STRING | 資料擷取瞬間的運行狀態,取值為Running或Waiting。 |
owner_id | STRING | 作業提交人云帳號ID。 |
owner_name | STRING | 作業提交人云帳號名稱。 |
start_time | DATETIME | 作業啟動時間。 |
priority | BIGINT | 作業優先順序,僅支援採用訂用帳戶資源的作業。 |
signature | STRING | 作業簽名。 |
queue_name | STRING | 計算隊列名稱。 |
cpu_usage | BIGINT | 當前CPU用量,值為core×100。 |
mem_usage | BIGINT | 當前記憶體用量,單位為MB。 |
gpu_usage | BIGINT | 當前GPU用量,值為卡×100。 |
total_cpu_usage | BIGINT | 累計CPU用量,值為core×100×s。 |
total_mem_usage | BIGINT | 累計記憶體用量,值為MB×s。 |
total_gpu_usage | BIGINT | 累計GPU用量,值為卡×100×s。 |
cpu_min_ratio | BIGINT | 作業當前CPU用量佔用隊列保障水位比例,僅支援採用訂用帳戶資源的作業。 |
mem_min_ratio | BIGINT | 作業當前記憶體用量佔用隊列保障水位比例,僅支援採用訂用帳戶資源的作業。 |
gpu_min_ratio | BIGINT | 作業當前GPU用量佔用隊列保障水位比例,僅支援採用訂用帳戶資源的作業。 |
cpu_max_ratio | BIGINT | 作業當前CPU用量佔用隊列最高彈性水位比例,僅支援採用訂用帳戶資源的作業。 |
mem_max_ratio | BIGINT | 作業當前記憶體用量佔用隊列最高彈性水位比例,僅支援採用訂用帳戶資源的作業。 |
gpu_max_ratio | BIGINT | 作業當前GPU用量佔用隊列最高彈性水位比例,僅支援採用訂用帳戶資源的作業。 |
settings | STRING | DataWorks等上層自訂調度設定。 |
additional_info | STRING | 附加資訊,保留欄位。 |
TASKS_HISTORY
MaxCompute專案內已完成的作業歷史,保留近14天資料。
欄位 | 類型 | 值 |
task_catalog | STRING | 固定值 |
task_schema | STRING | 專案名稱。 |
task_name | STRING | 作業名稱。 |
task_type | STRING | 作業類型。 作業類型取值如下:
|
inst_id | STRING | 執行個體ID。 |
status | STRING | 資料擷取瞬間的運行狀態(非即時狀態)。包含以下狀態:
|
owner_id | STRING | 賬戶ID。 |
owner_name | STRING | 雲賬戶名稱。 |
result | STRING | 僅在SQL作業出錯時有值,提供報錯資訊。 |
start_time | DATETIME | 作業啟動時間。 |
end_time | DATETIME | 作業結束時間(當天未結束為NULL)。 |
input_records | BIGINT | 作業讀取的records數目。 |
output_records | BIGINT | 作業輸出的records數目。 |
input_bytes | BIGINT | 實際掃描的資料量,與Logview相同。 |
output_bytes | BIGINT | 輸出位元組數。 |
input_tables | STRING | [project.table1,project.table2]格式的作業輸入表。有些作業無此資訊,如SQL COST類型作業。 |
output_tables | STRING | [project.table1,project.table2]格式的作業輸出表。 |
operation_text | STRING | 查詢語句的source_xml(source_xml超過256 KB時值為NULL)。 |
signature | STRING | 可選欄位。作業簽名。 |
complexity | DOUBLE | 可選欄位,作業複雜度。僅SQL作業有此欄位。 |
cost_cpu | DOUBLE | 作業CPU消耗(100表示1 core×s。例如:10 core運行5s,cost_cpu為10×100×5=5000)。 |
cost_mem | DOUBLE | 作業記憶體消耗(MB×s)。 |
settings | STRING | 上層調度或使用者傳入的資訊,以JSON格式儲存。包含欄位:USERAGENT、BIZID、SKYNET_ID和SKYNET_NODENAME。 |
ds | STRING | 資料擷取日期。例如20190101。 |
TUNNELS_HISTORY
資料通道批量上傳下載的歷史資料,保留近14天資料。
欄位 | 類型 | 值 |
tunnel_catalog | STRING | 固定值 |
tunnel_schema | STRING | 專案名稱。 |
session_id | STRING | 會話ID,格式為 |
operate_type | STRING | 操作類型。取值範圍:
|
tunnel_type | STRING | 通道類型。取值為TUNNEL LOG或TUNNEL INSTANCE LOG。 |
request_id | STRING | 請求ID。 |
object_type | STRING | 操作物件類型。取值為TABLE或INSTANCE。 |
object_name | STRING | 表名稱或執行個體ID。 |
partition_spec | STRING | 分區資訊。例如 |
data_size | BIGINT | 資料的位元組數,單位:位元組(Byte)。 |
block_id | BIGINT | Tunnel上傳的Block編號。當操作類型是UPLOADLOG時有效,否則為空白。 |
offset | BIGINT | 下載的起始位移位置,表示從第幾條記錄開始(起始是0)。 |
length | BIGINT | 即record_count,本次下載或上傳的記錄數(下載的記錄數為使用者指定的length值)。 |
owner_id | STRING | 雲賬戶ID。 |
owner_name | STRING | 雲賬戶名稱。 |
start_time | DATETIME | 請求開始時間。 |
end_time | DATETIME | 請求結束時間。 |
client_ip | STRING | 發起Tunnel請求的用戶端IP地址。 |
user_agent | STRING | User Agent,發起Tunnel請求的用戶端的相關資訊。例如Java版本、作業系統。 |
columns | STRING | Tunnel下載資料時指定列的集合。 |
ds | STRING | 資料擷取日期。例如20190101。 |