本文介紹Hudi格式的OSS外部表格的建立、讀取及寫入方法。
MaxCompute只對發行的整合了上述Hudi SDK版本的外部表格功能提供支援,不會繼續更新版本和演化功能,建議使用Paimon外部表格實現資料湖表格式讀取。
適用範圍
OSS外部表格不支援cluster屬性。
單個檔案大小不能超過2GB,如果檔案過大,建議拆分。
MaxCompute需要與OSS部署在同一地區。
Hudi外表只支援讀取外表映射的全部檔案的資料,不支援自動隱藏系統列,不支援增量讀、快照讀操作,不支援寫操作。建議使用MaxCompute Delta表或Paimon外部表格等功能實現ACID方式的讀寫操作。
MaxCompute系統預設整合的Hudi SDK版本為
org.apache.hudi:hudi-hadoop-mr-bundle:0.12.2-emr-1.0.6,無法保證Hudi SDK向前或向後相容,相容性由開源社區保證。
支援資料類型
MaxCompute資料類型詳情請參見1.0資料類型版本、2.0資料類型版本。
資料類型 | 是否支援 | 資料類型 | 是否支援 |
TINYINT |
| STRING |
|
SMALLINT |
| DATE |
|
INT |
| DATETIME |
|
BIGINT |
| TIMESTAMP |
|
BINARY |
| TIMESTAMP_NTZ |
|
FLOAT |
| BOOLEAN |
|
DOUBLE |
| ARRAY |
|
DECIMAL(precision,scale) |
| MAP |
|
VARCHAR(n) |
| STRUCT |
|
CHAR(n) |
| JSON |
|
建立外部表格
文法結構
CREATE EXTERNAL TABLE [IF NOT EXISTS] mc_oss_extable_name
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>)]
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS
INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'oss_location';參數說明
詳情請參見基礎文法參數說明。
查詢分析
情境樣本
通過內建開來源資料解析器建立Hudi格式外部表格,將資料寫入OSS並查詢。
前置準備
已準備好OSS儲存空間(Bucket)、OSS目錄。具體操作請參見建立儲存空間、管理目錄。
MaxCompute已支援在OSS側自動建立目錄,對於攜帶外部表格及UDF的SQL語句,可以通過一條SQL語句執行讀寫外部表格及UDF的操作。原手動建立目錄方式仍然支援。
由於MaxCompute只在部分地區部署,跨地區的資料連通性可能存在問題,因此建議Bucket與MaxCompute專案所在地區保持一致。
授權
已具備訪問OSS的許可權。阿里雲帳號(主帳號)、RAM使用者或RAMRole身份可以訪問OSS外部表格,授權資訊請參見OSS的STS模式授權。
已具備在MaxCompute專案中建立表(CreateTable)的許可權。表操作的許可權資訊請參見MaxCompute許可權。
上傳測試資料
登入OSS控制台,上傳測試資料Hudi格式資料檔案至OSS Bucket指定目錄
oss-mc-test/Demo_hudi_pt/dt=20250612/。具體操作請參見OSS檔案上傳。建立Delta Lake外表。
CREATE EXTERNAL TABLE vehicle_hudi_pt ( _hoodie_commit_time string, _hoodie_commit_seqno string, _hoodie_record_key string, _hoodie_partition_path string, _hoodie_file_name STRING , id STRING , name STRING ) PARTITIONED BY (ds STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo_hudi_pt/';引入分區資料。當建立OSS外部表格為分區表時,需要額外執行引入分區資料的操作,詳情請參見補全OSS外部表格分區資料文法。
MSCK REPAIR TABLE vehicle_hudi_pt ADD PARTITIONS;讀取Hudi外表。
SELECT * FROM vehicle_hudi_pt WHERE ds='20250612';