全部產品
Search
文件中心

MaxCompute:Delta Lake外部表格

更新時間:Aug 14, 2025

本文為您介紹Delta Lake格式的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許可權

使用限制

  • OSS外部表格不支援cluster屬性。

  • 單個檔案大小不能超過3 GB,如果檔案過大,建議拆分。

注意事項

  • Delta Lake外表只支援讀取外表映射的全部檔案的資料,不支援自動隱藏系統列,不支援增量讀、快照讀操作,不支援寫操作。建議您使用MaxCompute Delta表或Paimon外部表格等功能實現ACID方式的讀寫操作。

  • MaxCompute系統預設整合的Delta Lake SDK版本為io.delta:delta-core_2.11:0.2.0.5,無法保證Delta Lake SDK向前或向後相容,相容性由開源社區保證。

  • MaxCompute只對發行的整合了上述Delta Lake SDK版本的外部表格功能提供支援,不會繼續更新版本和演化功能,建議使用Paimon外部表格實現資料湖表格式讀取

資料類型支援

說明

下表中已開通表示支援,未開通表示不支援。

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 'io.delta.hive.DeltaInputFormat'
OUTPUTFORMAT 'io.delta.hive.DeltaOutputFormat'
LOCATION 'oss_location';

參數說明

詳情請參見基礎文法參數說明

查詢分析

情境樣本

通過內建開來源資料解析器建立Delta Lake格式外部表格,並將資料寫入OSS進行查詢。

  1. 準備資料。

    登入OSS控制台,上傳測試資料Delta Lake格式資料檔案至OSS Bucket指定目錄oss-mc-test/Demo_delta_pt/dt=20250612/。具體操作請參見OSS檔案上傳

  2. 建立Delta Lake外表。

    CREATE EXTERNAL TABLE test_delta_pt (
        id INT
    )
    PARTITIONED BY (dt STRING )
    ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
    STORED AS
    INPUTFORMAT 'io.delta.hive.DeltaInputFormat'
    OUTPUTFORMAT 'io.delta.hive.DeltaOutputFormat'
    LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo_delta_pt/';
  3. 引入分區資料。當建立的OSS外部表格為分區表時,需要額外執行引入分區資料的操作,詳情請參見補全OSS外部表格分區資料文法

    MSCK REPAIR TABLE test_delta_pt ADD PARTITIONS;
  4. 查詢Delta Lake外表。

    SELECT * FROM test_delta_pt WHERE dt='20250612';