全部產品
Search
文件中心

Hologres:基於DLF訪問Paimon Catalog

更新時間:Dec 31, 2025

Hologres自V3.2版本開始,支援通過DLF訪問Paimon Catalog資料,為使用者提供統一介面,提升中繼資料管理效率。

背景資訊

阿里雲資料湖構建(Data Lake Formation,簡稱DLF)是一款全託管的統一中繼資料和資料存放區及管理平台,為客戶提供中繼資料管理、許可權管理和儲存最佳化等功能。該平台能夠實現中繼資料的統一、湖表格式的統一以及資料存放區的統一,顯著簡化客戶在資料湖構建和管理過程中的營運工作,助力企業聚焦於業務創新和資料洞察。詳情請參見什麼是資料湖構建

功能詳情

  • Hologres自3.2版本開始支援以下功能:

    • 通過External Database對接DLF中的Paimon Catalog,詳情請參見EXTERNAL DATABASE

      • 通過Create/Drop External Schema實現級聯建立/刪除Paimon Catalog中的Database。

      • 通過Create/Drop External Table實現級聯建立/刪除Paimon Catalog中的表。

      • 查看Paimon Catalog中的所有Database和表。

    • 使用Dynamic Table全量、增量讀取Paimon表資料,詳情請參見CREATE DYNAMIC TABLE

    • 使用ANALYZE、AUTO ANALYZE收集外部表格統計資訊,協助最佳化器產生最佳的查詢計劃,詳情請參見ANALYZE和AUTO ANALYZE

    • 外部表格資料鏡像。

    • TimeTravel:基於Timestamp、Version、Tag查詢Paimon表歷史快照。

    • 分支查詢:基於Branch查詢Paimon分支資料及歷史快照。

    • 查詢Paimon系統資料表,如Snapshots、Tags。

  • Hologres自4.0版本開始支援豐富的DML操作:

    • 多並發寫入Paimon主鍵表,支援INSERT INTOINSERT OVERWRITE兩種寫入方式,並最佳化了寫入流程,支援按Bucket進行shuffle後再寫入,以減少小檔案產生。

    • 提供基於記憶體的緩衝機制來支援寫入需要緩衝機制的Paimon表,如Merge EngineFisrt Row、通過lookup機制產生Changelog或者開啟了Deletion Vector的表。

    • 支援對Paimon表進行UPDATEDELETE操作。

    • 從 3.2.6 和 4.0.6 版本開始支援讀取 Paimon 已到期的 snapshot 對應的 TAG 的資料。

前提條件

使用限制

  • 僅支援訪問同地區的DLF服務。

  • 暫不支援使用HoloWeb中的OSS資料湖加速功能可視化建立DLF Paimon Catalog。

  • 僅External Database方式映射的Paimon外表支援TimeTravel查詢、Branch查詢和資料鏡像能力。

  • 暫不支援對發生Schema Evolution的表執行TimeTravel查詢。

  • Dynamic Table暫不支援Paimon表和Branch的TimeTravel查詢。

  • 外部表格鏡像暫不支援Paimon主鍵表。

  • 不支援讀取Paimon預設分區資料,如分區值為空白或者NULL的分區。

  • 唯讀從執行個體暫不支援開啟資料湖加速能力。

  • 不支援對外部表格執行TRUNCATE命令,可使用INSERT OVERWRITE插入空資料代替。

  • 不支援寫入Paimon的動態分桶表,即建立Paimon表時未指定bucket參數或指定了bucket = -1

  • 僅支援對Merge Engine為deduplicatepartial-update的Paimon主鍵表執行UPDATE操作,且不支援更新主鍵。

  • 僅支援對Merge Engine為deduplicatepartial-update(需開啟partial-update.remove-record-on-delete屬性)的Paimon主鍵表執行DELETE操作。

  • 外表不支援DML混合事務,僅在單次DML過程中實現了兩階段交易認可,保證分布式寫入過程的原子性。

使用External Database方式映射Paimon Catalog

建立External Database(SLR模式)

服務關聯角色(SLR)是一種可信實體為阿里雲服務的RAM角色,旨在解決跨雲端服務的授權訪問相關問題。多數情況下,當您使用特定功能時,關聯的雲端服務會自動建立或刪除服務關聯角色,不需要您手動建立或刪除。通過服務關聯角色可以更好地配置雲端服務正常操作所必需的許可權,避免誤操作帶來的風險。詳情請參見服務關聯角色

適用情境

SLR模式適用於使用目前使用者身份訪問External Database資料的情境,Hologres預設基於SLR和身份透傳實現跨雲產品訪問。

操作步驟

  1. 對於新購或升級至Hologres V2.2及以上版本的執行個體,系統會預設建立服務關聯角色,無需手動建立,可跳過該步驟。

    說明

    Hologres V2.2以下版本的執行個體,需存取控制快速授權頁面,建立服務關聯角色。

  2. 串連Hologres執行個體並建立External Database。

    CREATE EXTERNAL DATABASE EXT_DATABASE_NAME WITH
      catalog_type 'paimon'
      metastore_type 'dlf-rest'
      dlf_catalog 'DLF_CATALOG_NAME' 
      comment 'paimon catalog on dlf'
      ;
  3. 查看External Database下的Schema和表。

    -- 查詢External Database下的Schema
    SELECT * FROM hologres.hg_external_schemas('EXT_DATABASE_NAME');
    
    -- 查詢Schema下的表
    SELECT * FROM hologres.hg_external_tables ('EXT_DATABASE_NAME', 'EXT_SCHEMA_NAME');
  4. 查詢表資料。

    SELECT * FROM EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME;

建立External Database(STS模式)

阿里雲STS(Security Token Service)是阿里雲提供的一種臨時存取權限管理服務。RAM提供RAM使用者和RAM角色兩種身份。其中,RAM角色不具備永久身份憑證,而只能通過STS擷取可以自訂時效和存取權限的臨時身份憑證,即安全性權杖(STS Token),詳情請參見什麼是STS

適用情境

STS模式適用於跨帳號訪問和Hologres自訂帳號(BASIC帳號)訪問External Database資料的情境。

操作步驟

  1. 登入RAM控制台,建立RAM角色,並授予DLF存取權限AliyunDLFFullAccess或AliyunDLFReadOnlyAccess。詳情請參見建立RAM角色並授權

  2. 增加信任策略,允許該RAM角色被可信雲端服務Hologres扮演。詳情請參見修改RAM角色的信任策略

    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "hologres.aliyuncs.com"
            ]
          }
        }
      ],
      "Version": "1"
    }
  3. 登入資料湖構建控制台,在目標Catalog中對RAM角色授予DB和表的存取權限。

  4. 在Hologres中建立External Database,認證策略指定上述RAM角色。

    CREATE EXTERNAL DATABASE EXT_DATABASE_NAME WITH
      catalog_type 'paimon'
      metastore_type 'dlf-rest'
      dlf_catalog 'paimon_catalog' 
      rolearn 'acs:ram::106380604****:role/***-ramrole'
      comment 'paimon catalog on dlf'
      ;
  5. 在Hologres中建立USER MAPPING,將需要訪問DLF Catalog的RAM使用者或BASIC帳號關聯到RAM角色。

    CREATE USER MAPPING FOR "<RAM使用者|BASIC帳號>"
    EXTERNAL DATABASE EXT_DATABASE_NAME
    OPTIONS
    (
       rolearn 'acs:ram::10638060***:role/***ramrole'
    );
    說明
  6. 通過RAM使用者登入Hologres管理主控台或BASIC帳號重新串連Hologres執行個體後,執行以下查詢SQL。

    SELECT * FROM EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME;

收集外表統計資訊

Analyze和Auto Analyze命令用於收集資料庫中表內容的統計資訊,最佳化器會根據這些統計資訊產生最佳的查詢計劃,從而提高查詢效率,詳情請參見ANALYZE和AUTO ANALYZE

-- 更新某個表的統計資訊,預設會收集表中所有列的統計資訊
analyze EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME;

-- 更新某個列的統計資訊,會比更新表時採樣的資料更多,更精準,主要用於更新管理條件的列
analyze EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME(COLNAME, COLNAME);

-- 開啟Auto Analyze
ALTER EXTERNAL DATABASE EXT_DATABASE_NAME WITH enable_auto_analyze 'true';

TimeTravel查詢

Hologres自V3.2版本開始,支援基於Timestamp、Version、Tag對Paimon表進行歷史Snapshots查詢,從而實現對資料的TimeTravel功能,同時支援在Hologres側查詢Paimon Snapshots、Tags系統資料表,來擷取目標表的Snapshot詳情。關於系統資料表介紹詳情,請參見Paimon System Tables

查詢Paimon Snapshots系統資料表

SELECT * FROM hologres.hg_list_snapshots('EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME;');

Snapshots系統資料表包含的欄位資訊與Paimon系統資料表的對應關係如下:

Snapshots系統資料表欄位

類型

描述

Paimon系統資料表對應欄位

branch_name

TEXT

分支名稱。

branch_name

snapshot_id

TEXT

快照ID。

snapshot_id

schema_id

TEXT

表Schema ID。

schema_id

commit_kind

TEXT

表資料提交類型。

commit_kind

commit_time

TIMESTAMPTZ

提交時間。

commit_time

extend_info

TEXT(JSON)

Paimon Snapshots系統資料表剩餘屬性。

Paimon Snapshots系統資料表剩餘屬性

您也可以通過hologres.hg_list_versions函數來查詢Paimon Snapshots系統資料表,對於Paimon表查詢來說,Version對應Snapshots ID。

SELECT * FROM hologres.hg_list_versions('EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME');

查詢Paimon Tag系統資料表

SELECT * FROM hologres.hg_list_tags('EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME');

Tag系統資料表包含的欄位資訊與Paimon系統資料表的對應關係如下:

Tag系統資料表欄位

類型

描述

Paimon系統資料表對應欄位

branch_name

TEXT

分支名稱。

branch_name

tag_name

TEXT

標籤名稱。

tag_name

snapshot_id

TEXT

快照ID。

snapshot_id

schema_id

TEXT

表Schema ID。

schema_id

commit_time

TIMESTAMPTZ

提交時間。

commit_time

extend_info

TEXT(JSON)

Paimon Tag系統資料表剩餘屬性。

Paimon Tag系統資料表剩餘屬性

基於Timestamp查詢Paimon歷史快照

SELECT * FROM 'EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME' FOR TIMESTAMP AS OF 'TIMESTAMP';

基於Version查詢Paimon歷史快照

對於Paimon表來說,Version對應Snapshots ID。

SELECT * FROM 'EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME' FOR VERSION AS OF 'VERSION';

基於Tag查詢Paimon歷史快照

SELECT * FROM 'EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME' FOR TAG AS OF 'TAG';

Branch查詢

Hologres自V3.2.版本開始,支援基於Branch查詢Paimon表指定分支資料,並支援分支Fallback屬性,更多關於Paimon Branch介紹詳情,請參見Manage Branch

查詢Branch系統資料表

SELECT * FROM hologres.hg_list_branches('EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME');

Branch系統資料表包含的欄位資訊與Paimon系統資料表的對應關係如下:

欄位

類型

描述

Paimon系統資料表對應欄位

branch_name

TEXT

分支名稱。

branch_name

create_time

TIMESTAMPTZ

分支建立時間。

create_time

extend_info

TEXT(JSON)

Paimon Branch系統資料表剩餘屬性。

Paimon Branch系統資料表剩餘屬性

查詢指定分支資料

SELECT * FROM 'EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME' FOR branch AS OF 'TAG';
說明

如果Paimon表設定了scan.fallback-branch屬性,查詢作業從當前分支讀取資料時,某個分區不存在,讀取器會嘗試從備用分支(Fallback Branch)讀取該分區的資料。更多關於Fallback Branch介紹詳情,請參見Manage Branch

查詢指定分支的歷史Snapshots資料

-- 基於Timestamp查詢
SELECT * FROM 'EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME' FOR branch AS OF 'BRANCH_NAME' TIMESTAMP AS OF 'TIMESTAMP';

-- 基於Tag查詢
SELECT * FROM 'EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME' FOR branch AS OF 'BRANCH_NAME' TAG AS OF 'TAG_NAME';

湖表鏡像加速

Hologres自V3.2版本起,新增湖表鏡像功能,以加速湖上資料查詢。該功能支援中繼資料與資料鏡像,能夠近即時或按指定時間間隔將外部資料源的變更同步至Hologres。此外,還支援全表鏡像和分區表的部分鏡像,可通過參數靈活控制鏡像資料的範圍。更多介紹詳情,請參見湖表鏡像

使用Foreign Table方式消費Paimon表

  1. 建立Foreign Server。

    關於Foreign Server的更多操作詳情,請參見Foreign Server更多操作(SQL方式)

    DLF文法

    說明

    適用於 2.5 及以上版本的 DLF 服務

    SQL文法如下:

    -- create foreign server
    CREATE SERVER IF NOT EXISTS SERVER_NAME FOREIGN DATA WRAPPER dlf_fdw OPTIONS (
        catalog_type 'paimon',
        metastore_type 'dlf-rest', 
        dlf_catalog 'DLF_CATALOG_NAME'
    );

    DLF1.0文法

    說明

    適用於 1.0 版本的 DLF 服務。

    SQL文法如下:

    -- create foreign server
    CREATE SERVER IF NOT EXISTS SERVER_NAME FOREIGN DATA WRAPPER dlf_fdw OPTIONS (
      dlf_region '',
      dlf_endpoint 'dlf-share..aliyuncs.com',
      oss_endpoint 'oss-REGION_ID-internal.aliyuncs.com',
      dlf_catalog 'dlf_catalog_name'                 
    );
  2. 建立外部表格。

    • IMPORT FOREIGN SCHEMA方式

      關於IMPORT FOREIGN SCHEMA使用詳情,請參見IMPORT FOREIGN SCHEMA

      • 使用IMPORT FOREIGN SCHEMA建立外表

        -- 使用import foreign schema建立外表
        IMPORT FOREIGN SCHEMA DLF_DB_NAME
        FROM SERVER SERVER_NAME 
        INTO <holo+schema_name> 
        options (if_table_exist 'update');
      • 指定表名建立外表

        IMPORT FOREIGN SCHEMA DLF_DB_NAME
        limit to (table_name[,....]) 
        FROM SERVER SERVER_NAME 
        into <holo+schema_name>
        options (if_table_exist 'update');
    • CREATE FOREIGN TABLE方式

      關於CREATE FOREIGN TABLE使用詳情,請參見CREATE FOREIGN TABLE

      CREATE FOREIGN TABLE FOREIGN_TABLE_NAME
      (
        { column_name data_type }
        [, ... ]
      ) 
      SERVER SERVER_NAME
      options
      (
        schema_name 'DLF_DB_NAME',
        table_name 'DLF_TABLE_NAME'
      );

使用Dynamic Table消費Paimon表

Dynamic Table可以自動處理並儲存一個或者多個基表(Base Table)對象的資料彙總結果,內建不同的資料重新整理策略,業務可以根據需求設定不同的資料重新整理策略,實現資料從基表對象到Dynamic Table的自動流轉,滿足業務統一開發、資料自動流轉、處理時效性等訴求。Hologres自V3.0版本開始,支援把MaxCompute外部表格和DLF外部表格作為Dynamic Table的基表,詳見Dynamic Table

全量重新整理

CREATE DYNAMIC TABLE paimon_dt_table
WITH (
      auto_refresh_mode='full',
      freshness='3 minutes'
)AS SELECT * FROM EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME;

增量重新整理

CREATE DYNAMIC TABLE paimon_dt_table_increamental
WITH (
      auto_refresh_mode='incremental',
      freshness='3 minutes'
)AS SELECT * FROM EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME;

自動重新整理

CREATE DYNAMIC TABLE paimon_dt_table_auto
WITH (
      auto_refresh_mode='auto',
      freshness='3 minutes'
)AS SELECT * FROM EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME;

DML操作

INSERT INTO

-- 使用Hologres SQL建立Paimon主鍵表並插入資料

CREATE EXTERNAL TABLE  EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME (
id BIGINT,
customer_id BIGINT,
item TEXT,
amount FLOAT,
dt TEXT,
PRIMARY KEY (id)
)
WITH (
"table_format" = 'paimon',
"file_format" = 'orc',
"merge-engine" = 'deduplicate', -- 合并策略樣本,可按需修改
"bucket" = '4' -- 樣本 bucket 數
);

INSERT INTO EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME (id, customer_id, item, amount, dt) VALUES
(1, 1001, 'apple', 3.50, '2025-09-10'),
(2, 1002, 'banana', 2.00, '2025-09-10'),
(3, 1003, 'orange', 4.20, '2025-09-11');

INSERT OVERWRITE

-- 使用Hologres SQL建立Paimon Append Table並插入資料

CREATE EXTERNAL TABLE EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME (
id BIGINT,
name TEXT,
amount FLOAT8,
dt TEXT
)
LOGICAL PARTITION BY LIST(dt)
WITH (
"table_format" = 'paimon',
"file_format" = 'parquet',
"merge-engine" = 'deduplicate', 
"bucket-key" = 'id',
"bucket" = '2'
);

INSERT OVERWRITE EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME(id, name, amount, dt) VALUES
(1, 'Alice', 100.50, '2025-09-01'),
(2, 'Bob', 200.00, '2025-09-01'),
(3, 'Carol', 150.75, '2025-09-02');

UPDATE

UPDATE EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME SET amount= 5 where id= 1;

DELETE

DELETE FROM EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME WHERE id = 2;