本文介紹了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天明細 | 與在線數據存在一定延遲,延遲時間為15分鐘左右。 | ||
準實時視圖,分區表,保留最近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。 |