全部產品
Search
文件中心

MaxCompute:Paimon外部表格

更新時間:Jan 01, 2026

MaxCompute支援通過建立Paimon外部表格與儲存於OSS上的Paimon表目錄建立映射關係,並訪問其中的資料。本文介紹如何建立Paimon外部表格以及如何通過MaxCompute訪問Paimon外部表格。

功能介紹

Apache Paimon是一種流批一體的湖儲存格式,具備高吞吐的寫入和低延後查詢能力。Realtime ComputeFlink版E-MapReduce的常見計算引擎(如Spark、Hive或Trino)都與Paimon有完善的整合。藉助Apache Paimon,可以在儲存服務OSS上快速構建資料湖,並能接入MaxCompute實現資料湖分析。中繼資料過濾功能通過減少讀取處理任務中不需要的OSS目錄檔案,進一步最佳化查詢效能。

適用範圍

  • Paimon外部表格不支援自動跟隨Paimon檔案schema變更而調整schema。

  • 不支援對Paimon外部表格設定cluster屬性,不支援設定主鍵。

  • Paimon外部表格暫不支援查詢回溯歷史版本的資料等特性。

  • 不建議直接將資料寫入Paimon外部表格,建議使用unload等方式匯出資料到OSS。

  • 可以使用INSERT INTO或INSERT OVERWRITE語句將資料寫入Paimon外部表格,暫不支援寫入Dynamic Bucket表和Cross Partition表。

  • 不支援對Paimon外部表格執行UPDATE/DELETE操作。

  • MaxCompute需要與OSS部署在同一地區。

支援資料類型

MaxCompute資料類型請參見1.0資料類型版本2.0資料類型版本

開源Paimon資料類型

MaxCompute 2.0資料類型

是否支援讀寫

說明

TINYINT

TINYINT

已開通

8位有符號整型。

SMALLINT

SMALLINT

已開通

16位有符號整型。

INT

INT

已開通

32位有符號整型。

BIGINT

BIGINT

已開通

64位有符號整型。

BINARY(MAX_LENGTH)

BINARY

已開通

位元據類型,目前長度限制為8 MB。

FLOAT

FLOAT

已開通

32位二進位浮點型。

DOUBLE

DOUBLE

已開通

64位二進位浮點型。

DECIMAL(precision,scale)

DECIMAL(precision,scale)

已開通

10進位精確數字類型。,預設為decimal(38,18)。允許自訂precision和scale值。

  • precision:表示最多可以表示多少位的數字。預設取值範圍:1 <= precision <= 38

  • scale:表示小數部分的位元。預設取值範圍: 0 <= scale <= 18

VARCHAR(n)

VARCHAR(n)

已開通

變長字元類型。n為長度,[1,65535]。

CHAR(n)

CHAR(n)

已開通

固定長度字元類型。n為長度,[1,255]。

VARCHAR(MAX_LENGTH)

STRING

已開通

字串類型目前長度限制為8MB。

DATE

DATE

已開通

日期類型格式為yyyy-mm-dd

TIME、TIME(p)

不支援

未開通

Paimon資料類型TIME,不帶時區的時間類型,由時分秒組成,精度可到納秒。

TIME(p)表示小數位的精度,0-9之間,預設為0。

MaxCompute側沒有映射的類型。

TIMESTAMP、TIMESTAMP(p)

TIMESTAMP_NTZ

已開通

無時區時間戳記類型,精確到納秒。

讀表需開啟Native開關SET odps.sql.common.table.jni.disable.native=true;

TIMESTAMP WITH LOCAL TIME_ZONE(9)

TIMESTAMP

已開通

  • 時間戳記類型,精確到納秒格式為yyyy-mm-dd hh:mm:ss.xxxxxxxxx

  • 針對Paimon源表TIMESTAMP低精度類型,在寫入時會截斷處理。0~3按照3位截斷,4~6按照6位截斷,7~9按照9位截斷。

TIMESTAMP WITH LOCAL TIME_ZONE(9)

DATETIME

未開通

時間戳記類型,精確到納秒

格式為yyyy-mm-dd hh:mm:ss.xxxxxxxxx

BOOLEAN

BOOLEAN

已開通

BOOLEAN類型。

ARRAY

ARRAY

已開通

複雜類型。

MAP

MAP

已開通

複雜類型。

ROW

STRUCT

已開通

複雜類型。

MULTISET<t>

不支援

未開通

MaxCompute側沒有映射的類型。

VARBINARY、VARBINARY(n)、BYTES

BINARY

已開通

可變長度二進位字串的資料類型。

建立Paimon外部表格

文法結構

各格式的外部表格文法結構詳情,請參見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寫入文法詳情,請參見寫入文法說明

查詢分析

使用樣本

步驟一:前置準備

  1. 建立MaxCompute專案

  2. 已準備好OSS儲存空間(Bucket)、OSS目錄。具體操作請參見建立儲存空間管理目錄

    由於MaxCompute只在部分地區部署,跨地區的資料連通性可能存在問題,因此建議Bucket與MaxCompute專案所在地區保持一致。
  3. 授權

    1. 具備訪問OSS的許可權。阿里雲帳號(主帳號)、RAM使用者或RAMRole身份可以訪問OSS外部表格,授權資訊請參見OSS的STS模式授權

    2. 已具備在MaxCompute專案中建立表(CreateTable)的許可權。表操作的許可權資訊請參見MaxCompute許可權

步驟二:在Flink中準備資料

建立Paimon Catalog和Paimon表,並在表中插入資料,樣本如下。

說明

如果在OSS中已有Paimon表資料,可忽略此步驟。

  1. 建立Paimon Filesystem Catalog

    1. 登入Flink控制台,在左上方選擇地區。

    2. 單擊目標工作空間名稱,然後在左側導覽列,選擇資料管理

    3. 在右側Catalog列表 介面,單擊建立Catalog 。在彈出的建立 Catalog 對話方塊裡,選擇Apache Paimon,單擊下一步 並配置如下參數:

      參數

      是否必填

      說明

      metastore

      必填

      中繼資料存放區類型。本樣本中選擇filesystem

      catalog name

      必填

      自訂catalog名稱,例如paimon-catalog

      warehouse

      必填

      OSS服務中所指定的數倉目錄。本樣本中oss://paimon-fs/paimon-test/

      fs.oss.endpoint

      必填

      OSS服務的endpoint,例如杭州地區為oss-cn-hangzhou-internal.aliyuncs.com

      fs.oss.accessKeyId

      必填

      訪問OSS服務所需的Access Key ID。

      fs.oss.accessKeySecret

      必填

      訪問OSS服務所需的Access Key Secret。

  2. 建立Paimon表

    1. 登入Flink控制台,在左上方選擇地區。

    2. 單擊目標工作空間名稱,然後在左側導覽列,選擇資料開發 > 資料查詢

    3. 查詢指令碼頁簽,單擊image,建立查詢指令碼。

      輸入如下命令後,單擊運行。

      CREATE TABLE `paimon_catalog`.`default`.test_tbl (
          id BIGINT,
          data STRING,
          dt STRING,
          PRIMARY KEY (dt, id) NOT ENFORCED
      ) PARTITIONED BY (dt);
      
      INSERT INTO `paimon-catalog`.`default`.test_tbl VALUES (1,'CCC','2024-07-18'), (2,'DDD','2024-07-18');
  3. 若SQL作業有限流作業(例如執行INSERT INTO ... VALUES ...語句),需要執行以下操作:

    1. 單擊目標工作空間名稱,然後在左側導覽列,選擇營運中心 > 作業營運

    2. 作業營運頁面,單擊目標作業名稱,進入作業部署詳情頁面。

    3. 運行參數配置地區,單擊編輯,在其他配置中設定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-<your region>-internal.aliyuncs.com/<table_path>'
;

上述代碼中table_path為Flink中建立的Paimon表路徑,例如paimon-fs/paimon-test/default.db/test_tbl。擷取方法如下:

  1. 登入Flink控制台,在左上方選擇地區。

  2. 單擊目標工作空間名稱,然後在左側導覽列,選擇資料管理

  3. 中繼資料頁面單擊目標Catalog下的default,並在default頁面中單擊目標表操作列的查看

  4. 表結構詳情頁簽的表屬性地區擷取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 | 
+------------+------------+------------+
說明

當Paimon檔案中的Schema與外表Schema不一致時:

  • 列數不一致:如果Paimon檔案中的列數小於外表DDL的列數,則讀取Paimon資料時,系統會將缺少的列值補充為NULL。反之(大於時),會丟棄超出的列資料。

  • 列類型不一致:MaxCompute不支援使用INT類型接收Paimon檔案中的STRING類型資料,支援使用STRING類型接收INT類型資料(不推薦)。

常見問題

讀Paimon外部表格報錯kSIGABRT

  • 報錯資訊

    ODPS-0123144: Fuxi job failed - kSIGABRT(errCode:6) at Odps/*****_SQL_0_1_0_job_0/M1@f01b17437.cloud.eo166#3. 
      Detail error msg: CRASH_CORE, maybe caused by jvm crash, please check your java udf/udaf/udtf. 
      | fatalInstance: Odps/*****_SQL_0_1_0_job_0/M1#0_0 
  • 錯誤原因

    JNI模式下讀取TIMESTAMP_NTZ類型會產生此報錯。

  • 解決方案

    讀表前加上開啟Native開關SET odps.sql.common.table.jni.disable.native=true;

相關文檔

可以在Flink中以自訂Catalog的方式建立MaxCompute Paimon外部表格,並在寫入資料後,通過MaxCompute查詢並消費Paimon資料,詳情請參見基於Flink建立MaxCompute Paimon外部表格