MaxCompute支援通過建立Paimon外部表格與儲存於OSS上的Paimon表目錄建立映射關係,並訪問其中的資料。本文為您介紹如何建立Paimon外部表格,並通過MaxCompute訪問Paimon外部表格。
背景資訊
Apache Paimon是一種流批一體的湖儲存格式,具備高吞吐的寫入和低延後查詢能力。Realtime ComputeFlink版、E-MapReduce的常見計算引擎(如Spark、Hive或Trino)都與Paimon有完善的整合。藉助Apache Paimon,您可快速構建自己的資料湖儲存服務在儲存服務OSS上,並接入MaxCompute實現資料湖的分析。您可以通過中繼資料過濾來減少處理任務中對不需要的OSS目錄中檔案的讀取。
前提條件
已具備訪問OSS的許可權。阿里雲帳號(主帳號)、RAM使用者或RAMRole身份可以訪問OSS外部表格,授權資訊請參見OSS的STS模式授權。
(可選)已準備好OSS儲存空間(Bucket)、OSS目錄及OSS資料檔案。具體操作請參見建立儲存空間、管理目錄和簡單上傳。
MaxCompute已支援在OSS側自動建立目錄,對於攜帶外部表格及UDF的SQL語句,您可以通過一條SQL語句執行讀寫外部表格及UDF的操作。原手動建立目錄方式仍然支援。
已建立MaxCompute專案。具體操作請參見建立MaxCompute專案。
由於MaxCompute只在部分地區部署,跨地區的資料連通性可能存在問題,因此建議Bucket與MaxCompute專案所在地區保持一致。
已具備在MaxCompute專案中建立表(CreateTable)的許可權。表操作的許可權資訊請參見MaxCompute許可權。
使用限制
當前MaxCompute僅支援對Paimon外部表格的讀取操作,暫不支援寫入和自動跟隨Paimon表結構變更等操作。
Paimon外部表格不支援cluster屬性。
Paimon外部表格暫不支援查詢回溯歷史版本的資料等特性。
注意事項
當Paimon檔案中的Schema與外表Schema不一致時:
列數不一致:如果Paimon檔案中的列數小於外表DDL的列數,則讀取Paimon資料時,系統會將缺少的列值補充為NULL。反之(大於時),會丟棄超出的列資料。
列類型不一致:MaxCompute不支援使用INT類型接收Paimon檔案中的STRING類型資料,支援使用STRING類型接收INT類型資料(不推薦)。
資料類型支援
下表中
表示支援,
表示不支援。
MaxCompute資料類型請參見1.0資料類型版本和2.0資料類型版本。
資料類型 | 是否支援 |
TINYINT |
|
SMALLINT |
|
INT |
|
BIGINT |
|
BINARY |
|
FLOAT |
|
DOUBLE |
|
DECIMAL(precision,scale) |
|
VARCHAR(n) |
|
CHAR(n) |
|
STRING |
|
DATE |
|
DATETIME |
|
TIMESTAMP |
|
TIMESTAMP_NTZ |
|
BOOLEAN |
|
ARRAY |
|
MAP |
|
STRUCT |
|
JSON |
|
建立外部表格
文法結構
各格式的外部表格文法結構詳情,請參見OSS外部表格。
CREATE EXTERNAL TABLE [if NOT EXISTS] <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
LOCATION '<oss_location>';公用參數
公用參數說明請參見基礎文法參數說明。
寫入資料
MaxCompute寫入文法詳情,請參見寫入文法說明。
查詢分析
使用樣本
步驟一:在Flink中準備資料
建立Paimon Catalog和Paimon表,並在表中插入資料,樣本如下。
如果您在OSS中已有Paimon表資料,可忽略此步驟。
登入Realtime Compute控制台,建立Paimon Filesystem Catalog。假設建立的Catalog名稱為
paimoncatalog,具體操作請參見建立Paimon Filesystem Catalog。建立Paimon表,具體操作請參見管理Paimon表。
在資料查詢文本編輯地區輸入如下命令後,選中代碼後單擊運行。
CREATE TABLE `paimoncatalog`.`default`.test_tbl ( id BIGINT, data STRING, dt STRING, PRIMARY KEY (dt, id) NOT ENFORCED ) PARTITIONED BY (dt);在頁面,建立包含如下語句的SQL作業,部署並運行作業。具體操作請參見作業開發地圖。
INSERT INTO `paimoncatalog`.`default`.test_tbl VALUES (1,'CCC','2024-07-18'), (2,'DDD','2024-07-18');重要請確認SQL作業的引擎版本為vvr-8.0.1-flink-1.17及以上版本。
若SQL作業有限流作業(例如執行
INSERT INTO ... VALUES ...語句),需要執行以下操作:在作業營運頁面單擊目標作業,進入部署詳情頁簽。
編輯運行參數配置,在其他配置中設定
execution.checkpointing.checkpoints-after-tasks-finish.enabled: true代碼,並儲存。關於如何配置作業的運行參數詳情,請參見配置作業部署資訊。
步驟二:通過MaxCompute建立Paimon外表
在MaxCompute中執行以下SQL代碼,建立MaxCompute Paimon外部表格。
CREATE EXTERNAL TABLE oss_extable_paimon_pt
(
id BIGINT,
data STRING
)
PARTITIONED BY (dt STRING )
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/<table_path>'
;
MSCK REPAIR TABLE oss_extable_paimon_pt ADD PARTITIONS;上述代碼中table_path為Flink中建立的Paimon表路徑,例如oss-mc-test/paimon/default.db/test_tbl。擷取方法如下:
登入Realtime Compute控制台,單擊工作空間名稱進入目標工作空間。
在左側導覽列,單擊資料管理。
在中繼資料頁面單擊目標Catalog下的default,並在default頁面中單擊目標表操作列的查看。
在表結構詳情頁簽的表屬性地區擷取path參數值,table_path中僅填寫
oss://之後的路徑。
步驟三:引入分區資料
當建立的OSS外部表格為分區表時,需要額外執行引入分區資料的操作,詳情請參見補全OSS外部表格分區資料文法。
MSCK REPAIR TABLE oss_extable_paimon_pt ADD PARTITIONS;步驟四:通過MaxCompute讀取Paimon外部表格
在MaxCompute中執行以下命令,查詢MaxCompute Paimon外部表格oss_extable_paimon_pt。
SET odps.sql.common.table.planner.ext.hive.bridge = true;
SET odps.sql.hive.compatible = true;
SELECT * FROM oss_extable_paimon_pt WHERE dt='2024-07-18';返回結果如下:
+------------+------------+------------+
| id | data | dt |
+------------+------------+------------+
| 1 | CCC | 2024-07-18 |
| 2 | DDD | 2024-07-18 |
+------------+------------+------------+相關文檔
您還可以在Flink中以自訂Catalog的方式建立MaxCompute Paimon外部表格,並在寫入資料後,通過MaxCompute查詢並消費Paimon資料,詳情請參見基於Flink建立MaxCompute Paimon外部表格。