Paimon外部表
MaxCompute支持通過(guò)創(chuàng)建Paimon外部表來(lái)與存儲(chǔ)在OSS上的Paimon表目錄建立映射關(guān)系,并訪問(wèn)其中的數(shù)據(jù)。本文將介紹如何創(chuàng)建Paimon外部表并通過(guò)MaxCompute訪問(wèn)Paimon外部表。
背景信息
Apache Paimon是一種流批一體的湖存儲(chǔ)格式,具備高吞吐的寫(xiě)入和低延遲的查詢能力。阿里云實(shí)時(shí)計(jì)算Flink版、開(kāi)源大數(shù)據(jù)平臺(tái)E-MapReduce的常見(jiàn)計(jì)算引擎(如Spark、Hive或Trino)都與Paimon有完善的集成。借助Apache Paimon,您可以快速構(gòu)建自己的數(shù)據(jù)湖存儲(chǔ)服務(wù)在存儲(chǔ)服務(wù)OSS上,并接入MaxCompute實(shí)現(xiàn)數(shù)據(jù)湖的分析。關(guān)于Apache Paimon的詳細(xì)信息,請(qǐng)參見(jiàn)Apache Paimon。
前提條件
當(dāng)前執(zhí)行操作的賬號(hào)已具備創(chuàng)建MaxCompute表(CreateTable)的權(quán)限。更多表權(quán)限信息,請(qǐng)參見(jiàn)MaxCompute權(quán)限。
已創(chuàng)建MaxCompute項(xiàng)目。具體操作,請(qǐng)參見(jiàn)創(chuàng)建MaxCompute項(xiàng)目。
已創(chuàng)建存儲(chǔ)空間(Bucket)以及對(duì)應(yīng)的文件目錄。具體操作,請(qǐng)參見(jiàn)創(chuàng)建存儲(chǔ)空間。
說(shuō)明由于MaxCompute只在部分地域部署,跨地域的數(shù)據(jù)連通性可能存在問(wèn)題,因此建議Bucket與MaxCompute項(xiàng)目所在地域保持一致。
已購(gòu)買(mǎi)Flink全托管,具體操作請(qǐng)參見(jiàn)開(kāi)通實(shí)時(shí)計(jì)算Flink版。
注意事項(xiàng)
當(dāng)前MaxCompute僅支持對(duì)Paimon外部表的讀取操作,暫時(shí)不支持寫(xiě)入和自動(dòng)跟隨Paimon表結(jié)構(gòu)變更等操作。
Paimon當(dāng)前暫時(shí)不支持開(kāi)啟了Schema操作的MaxCompute項(xiàng)目。
Paimon外部表不支持cluster屬性。
Paimon外部表暫不支持查詢回溯歷史版本的數(shù)據(jù)等特性。
創(chuàng)建Paimon外部表命令語(yǔ)法
MaxCompute創(chuàng)建Paimon外部表的語(yǔ)法定義如下:
CREATE EXTERNAL TABLE [if NOT EXISTS] <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[partitioned BY (<col_name> <data_type>, ...)]
stored BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::xxxxxxxxxxxxx:role/aliyunodpsdefaultrole'
)
location '<oss_location>'
USING 'paimon_maxcompute_connector.jar';
若您創(chuàng)建的Paimon外部表為分區(qū)表時(shí),需要額外執(zhí)行引入分區(qū)數(shù)據(jù)的操作。命令詳情,請(qǐng)參見(jiàn)補(bǔ)全OSS外部表分區(qū)數(shù)據(jù)語(yǔ)法。
方式一(推薦):自動(dòng)解析OSS目錄結(jié)構(gòu),識(shí)別分區(qū),為OSS外部表添加分區(qū)信息。
msck repair TABLE <mc_oss_extable_name> ADD partitions;
方式二:手動(dòng)執(zhí)行如下命令為OSS外部表添加分區(qū)信息。
ALTER TABLE <mc_oss_extable_name> ADD PARTITION (<col_name>= <col_value>);
參數(shù)說(shuō)明如下:
參數(shù)名稱(chēng) | 可選/必填 | 說(shuō)明 |
mc_oss_extable_name | 必填 | 待創(chuàng)建的Paimon外部表的名稱(chēng)。 表名大小寫(xiě)不敏感,在查詢外部表時(shí),無(wú)需區(qū)分大小寫(xiě),且不支持強(qiáng)制轉(zhuǎn)換大小寫(xiě)。 |
col_name | 必填 | Paimon外部表的列名稱(chēng)。 在讀取Paimon數(shù)據(jù)場(chǎng)景,創(chuàng)建的Paimon外部表結(jié)構(gòu)必須與Paimon數(shù)據(jù)文件結(jié)構(gòu)保持一致,否則無(wú)法成功讀取Paimon數(shù)據(jù)。 |
data_type | 必填 | Paimon外部表的列數(shù)據(jù)類(lèi)型。 在讀取Paimon數(shù)據(jù)場(chǎng)景,創(chuàng)建的Paimon外部表各列數(shù)據(jù)類(lèi)型必須與Paimon數(shù)據(jù)文件各列數(shù)據(jù)類(lèi)型保持一致,否則無(wú)法成功讀取Paimon數(shù)據(jù)。 |
odps.properties.rolearn | 必填 | 指定RAM中Role(具有訪問(wèn)OSS權(quán)限)的ARN信息。 您可以通過(guò)RAM控制臺(tái)中的角色詳情獲取。 |
oss_location | 必填 | 數(shù)據(jù)文件所在OSS路徑。格式為
|
使用說(shuō)明
步驟一:在Flink中準(zhǔn)備數(shù)據(jù)
創(chuàng)建Paimon Catalog和Paimon表,并在表中插入數(shù)據(jù),參考示例操作步驟如下。如果您在Flink中已有Paimon表和數(shù)據(jù),可以跳過(guò)此步。
登錄實(shí)時(shí)計(jì)算控制臺(tái),創(chuàng)建Paimon Catalog。具體操作,請(qǐng)參見(jiàn)創(chuàng)建Paimon Catalog。
創(chuàng)建Paimon表。具體操作,請(qǐng)參見(jiàn)管理Paimon表。
在元數(shù)據(jù)管理頁(yè)面,選擇已創(chuàng)建Paimon Catalog下的default,然后單擊創(chuàng)建表,如下圖所示。
在添加表對(duì)話框,選擇Apache Paimon連接器,輸入以下語(yǔ)句,單擊確定。本文以test_tbl表為例。
CREATE TABLE `catalogname`.`default`.test_tbl ( dt STRING, id BIGINT, data STRING, PRIMARY KEY (dt, id) NOT ENFORCED ) PARTITIONED BY (dt);
在SQL 開(kāi)發(fā)頁(yè)面,創(chuàng)建包含如下語(yǔ)句的SQL作業(yè),部署并運(yùn)行作業(yè)。關(guān)于如何創(chuàng)建并運(yùn)行SQL作業(yè)詳情,請(qǐng)參見(jiàn)SQL作業(yè)開(kāi)發(fā)。
INSERT INTO `catalogname`.`default`.test_tbl VALUES ('2023-04-21', 1, 'AAA'), ('2023-04-21', 2, 'BBB'), ('2023-04-22', 1, 'CCC'), ('2023-04-22', 2, 'DDD');
說(shuō)明請(qǐng)確認(rèn)SQL作業(yè)的引擎版本為vvr-8.0.1-flink-1.17及以上版本。
若SQL作業(yè)有限流作業(yè)(例如執(zhí)行
INSERT INTO ... VALUES ...
語(yǔ)句),需要在作業(yè)運(yùn)維頁(yè)面,編輯運(yùn)行參數(shù)配置,在其他配置設(shè)置execution.checkpointing.checkpoints-after-tasks-finish.enabled: true
代碼。關(guān)于如何配置作業(yè)的運(yùn)行參數(shù)詳情,請(qǐng)參見(jiàn)配置作業(yè)部署信息。
步驟二:在MaxCompute項(xiàng)目中上傳Paimon插件
您可以選擇以下其中一種方式,在已創(chuàng)建的MaxCompute項(xiàng)目中上傳Paimon插件。
使用MaxCompute客戶端
通過(guò)客戶端(odpscmd)訪問(wèn)已創(chuàng)建的MaxCompute項(xiàng)目,并執(zhí)行以下代碼,將paimon_maxcompute_connector.jar
上傳至MaxCompute項(xiàng)目中。
ADD JAR <path_to_paimon_maxcompute_connector.jar>;
使用DataWorks
登錄DataWorks控制臺(tái),在左側(cè)導(dǎo)航欄選擇工作空間,單擊目標(biāo)工作空間操作列中的快速進(jìn)入 > 數(shù)據(jù)開(kāi)發(fā)。
在數(shù)據(jù)開(kāi)發(fā)頁(yè)面,單擊新建按鈕,選擇新建資源 > JAR。
在新建資源對(duì)話框,配置新建資源參數(shù),上傳
paimon_maxcompute_connector.jar
,單擊新建。新建資源操作詳情,請(qǐng)參見(jiàn)步驟一:創(chuàng)建或上傳資源。資源創(chuàng)建完成后,您需在資源編輯頁(yè)面,單擊工具欄中的圖標(biāo),提交資源至調(diào)度開(kāi)發(fā)服務(wù)器端。
步驟三:通過(guò)MaxCompute創(chuàng)建Paimon外表
使用本地客戶端(odpscmd)連接或其他可以運(yùn)行MaxCompute SQL的工具,創(chuàng)建MaxCompute Paimon外部表。本文以oss_extable_paimon_1pt
為例。
CREATE EXTERNAL TABLE oss_extable_paimon_1pt
(
id BIGINT,
data STRING
)
PARTITIONED BY (dt STRING )
stored BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::124*********:role/aliyunodpsdefaultrole'
)
location 'oss://oss-cn-beijing-internal.aliyuncs.com/paimon_flink/test_db_y.db/test_tbl/'
USING 'paimon_maxcompute_connector.jar'
;
步驟四:通過(guò)MaxCompute讀取Paimon外部表
使用本地客戶端(odpscmd)或其他可以運(yùn)行MaxCompute SQL的工具,執(zhí)行以下命令。
SET odps.sql.common.table.planner.ext.hive.bridge = true; SET odps.sql.hive.compatible = true;
執(zhí)行以下命令,查詢MaxCompute Paimon外部表
oss_extable_paimon_1pt
。SELECT * FROM oss_extable_paimon_1pt;
示例返回結(jié)果如下。
+------------+------------+------------+ | id | data | dt | +------------+------------+------------+ | 1 | AAA | 2023-04-21 | | 2 | BBB | 2023-04-21 | +------------+------------+------------+
說(shuō)明若返回結(jié)果中沒(méi)有顯示分區(qū)信息,您可以通過(guò)如下命令追加分區(qū)信息:
msck repair table oss_extable_paimon_1pt add partitions;
相關(guān)文檔
您還可以在Flink中以自定義Catalog的方式創(chuàng)建MaxCompute Paimon外部表,并在寫(xiě)入數(shù)據(jù)后,通過(guò)MaxCompute查詢并消費(fèi)Paimon數(shù)據(jù),詳情請(qǐng)參見(jiàn)基于Flink創(chuàng)建MaxCompute Paimon外部表。