すべてのプロダクト
Search
ドキュメントセンター

Hologres:DLF カタログを用いた Paimon データへのアクセス

最終更新日:Mar 08, 2026

Hologres V3.2 以降のバージョンでは、DLF カタログを用いて Paimon データにアクセスできます。この機能により、統一されたインターフェイスが提供され、メタデータ管理の効率が向上します。

背景情報

Alibaba Cloud Data Lake Formation (DLF) は、メタデータ、データストレージ、およびデータ管理を統合的にサポートするフルマネージドなプラットフォームです。メタデータ管理、権限管理、ストレージ最適化などの機能を提供し、メタデータ、レイクテーブルフォーマット、データストレージを統一することで、データレイク構築および運用時の O&M 作業を大幅に簡素化します。これにより、企業はビジネスイノベーションやデータインサイトに集中できるようになります。詳細については、「Data Lake Formation とは」をご参照ください。

機能の詳細

  • Hologres V3.2 以降のバージョンでサポートされる機能は以下のとおりです:

    • 外部データベースを使用して DLF カタログに接続します。詳細については、「EXTERNAL DATABASE」をご参照ください。

      • Create/Drop External Schema を使用して、DLF カタログ内のデータベースを作成または削除します。

      • Create/Drop External Table を使用して、DLF カタログ内のテーブルを作成または削除します。

      • DLF カタログ内のすべてのデータベースおよびテーブルを表示します。

    • Dynamic Table を使用して、Paimon テーブルのデータを完全モードおよび増分モードで読み取ります。詳細については、「CREATE DYNAMIC TABLE」をご参照ください。

    • ANALYZE および AUTO ANALYZE を使用して、外部テーブルの統計情報を収集します。これにより、オプティマイザーが最適なクエリ実行計画を生成し、クエリパフォーマンスが向上します。詳細については、「ANALYZE および AUTO ANALYZE」をご参照ください。

    • 外部テーブルのデータミラーリング。

    • タイムトラベル:タイムスタンプ、バージョン、またはタグに基づいて、Paimon テーブルの履歴スナップショットをクエリします。

    • ブランチクエリ:ブランチに基づいて、Paimon ブランチのデータおよび履歴スナップショットをクエリします。

    • Snapshots や Tags などの Paimon システムテーブルをクエリします。

  • Hologres V4.0 以降のバージョンでは、さまざまな DML 操作がサポートされます:

    • 複数の同時操作で Paimon プライマリキー テーブルへ書き込みを行います。この機能では INSERT INTO および INSERT OVERWRITE の両方がサポートされます。書き込みプロセスでは、書き込み前にバケット単位でデータをシャッフルするため、小規模ファイルの生成が抑制されます。

    • Paimon テーブルへの書き込み時にキャッシュが必要な場合に備えて、メモリベースのキャッシュ機構を提供します。例として、Merge EngineFirst Row であるテーブル、lookup 機構を用いて Changelog を生成するテーブル、または Deletion Vector が有効化されているテーブルなどがあります。

    • Paimon テーブルに対する UPDATE および DELETE 操作をサポートします。

    • Hologres V3.2.6 および V4.0.6 以降のバージョンでは、期限切れとなった Paimon スナップショットに対応するタグからデータを読み取ることが可能です。

前提条件

制限事項

  • 同一リージョン内の DLF サービスのみにアクセスできます。

  • HoloWeb の OSS データレイクアクセラレーション機能では、DLF カタログを視覚的に作成できません。

  • TimeTravel クエリ、ブランチクエリ、およびデータミラーリングは、外部データベースを用いてマッピングされた Paimon 外部テーブルのみがサポートします。

  • スキーマ進化が行われたテーブルに対する TimeTravel クエリはサポートされていません。

  • Dynamic Table では、Paimon テーブルおよびブランチに対する TimeTravel クエリはサポートされていません。

  • 外部テーブルのミラーリングは、Paimon プライマリキー テーブルをサポートしていません。

  • Paimon からのデフォルトパーティションデータ(空または NULL 値のパーティションなど)の読み取りはサポートされていません。

  • 読み取り専用レプリカインスタンスでは、データレイクアクセラレーションはサポートされていません。

  • 外部テーブルに対して TRUNCATE コマンドを実行することはできません。代わりに、INSERT OVERWRITE を使用して空のデータを挿入してください。

  • Paimon のダイナミックバケットテーブルへの書き込みはサポートされていません。これは、bucket パラメーターを指定せずに作成された Paimon テーブル、または bucket = -1 で作成されたテーブルを指します。

  • UPDATE 操作は、Merge Engine が deduplicate または partial-update に設定された Paimon プライマリキー テーブルでのみサポートされます。プライマリキーの更新はサポートされていません。

  • DELETE 操作は、Merge Engine が deduplicate または partial-update に設定された Paimon プライマリキー テーブルでのみサポートされます(partial-update.remove-record-on-delete プロパティを有効化する必要があります)。

  • 外部テーブルでは、混合 DML トランザクションはサポートされていません。単一の DML 操作のみが二相コミットプロトコルを実装し、分散書き込み時の原子性を保証します。

外部データベースを用いた DLF カタログのマッピング

外部データベースの作成(SLR モード)

サービスリンクロール(SLR)は、信頼できるエンティティが Alibaba Cloud サービスである RAM ロールの一種です。SLR は、異なる Alibaba Cloud サービス間での承認済みアクセスを管理するために設計されています。通常、特定の機能を利用する際に、関連する Alibaba Cloud サービスが自動的に SLR を作成または削除します。手動での作成または削除は不要です。SLR を使用すると、サービスが他のサービスにアクセスするための承認処理が簡素化され、誤操作リスクも低減されます。詳細については、「サービスリンクロール」をご参照ください。

適用シナリオ

SLR モードは、現在のユーザー ID を使用して外部データベースのデータにアクセスするシナリオに適用されます。Hologres では、デフォルトで SLR および ID パススルーを用いて、マルチクラウドプロダクト間のアクセスを実現します。

操作手順

  1. 新規購入または Hologres V2.2 以降へアップグレードされたインスタンスの場合、システムが自動的にサービスリンクロールを作成します。手動での作成は不要であり、このステップはスキップできます。

    説明

    Hologres V2.2 より前のバージョンを実行しているインスタンスの場合、Resource Access Management クイック承認 ページを使用してサービスリンクロールを作成する必要があります。

  2. Hologres インスタンスに接続し、外部データベースを作成します。

    CREATE EXTERNAL DATABASE EXT_DATABASE_NAME WITH
      catalog_type 'paimon',
      metastore_type 'dlf-rest',
      dlf_catalog 'DLF_CATALOG_NAME',
      comment 'dlf catalog';
    
  3. 外部データベース内のスキーマおよびテーブルを表示します。

    -- 外部データベース内のスキーマをクエリ
    SELECT * FROM hologres.hg_external_schemas('<span class="var-span" contenteditable="true" data-var="EXT_DATABASE_NAME">EXT_DATABASE_NAME'</span>);
    
    -- スキーマ内のテーブルをクエリ
    SELECT * FROM hologres.hg_external_tables ('<span class="var-span" contenteditable="true" data-var="EXT_DATABASE_NAME">EXT_DATABASE_NAME'</span>, '<span class="var-span" contenteditable="true" data-var="EXT_SCHEMA_NAME">EXT_SCHEMA_NAME'</span>);
  4. テーブルデータをクエリします。

    SELECT * FROM EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME;

外部データベースの作成(STS モード)

Alibaba Cloud Security Token Service (STS) は、一時的な認証情報を管理するサービスです。Resource Access Management (RAM) には、RAM ユーザーおよび RAM ロールという 2 種類の ID が存在します。RAM ロールには永続的な認証情報はなく、STS から有効期間およびアクセス権限をカスタマイズ可能な一時的な認証情報を取得します。これらの認証情報は、Security Token Service (STS) トークンと呼ばれます。詳細については、「STS とは」をご参照ください。

適用シナリオ

STS モードは、クロスアカウントアクセス、および Hologres カスタムアカウント(BASIC アカウント)が外部データベースのデータにアクセスするシナリオに適用されます。

操作手順

  1. Resource Access Management (RAM) コンソールにログインし、RAM ロールを作成して、DLF アクセス用に AliyunDLFFullAccess または AliyunDLFReadOnlyAccess 権限を付与します。詳細については、「RAM ロールの作成および権限の付与」をご参照ください。

  2. 信頼ポリシーを更新し、RAM ロールが信頼される Alibaba Cloud サービス Hologres によって引き受けられるようにします。詳細については、「RAM ロールの信頼ポリシーの変更」をご参照ください。

    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "hologres.aliyuncs.com"
            ]
          }
        }
      ],
      "Version": "1"
    }
  3. Data Lake Formation コンソールにログインし、対象カタログ内の RAM ロールに対してデータベースおよびテーブルのアクセス権限を付与します。

  4. Hologres で外部データベースを作成します。先に作成した 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 'dlf catalog'
      ;
  5. Hologres で USER MAPPING を作成し、DLF カタログにアクセスする RAM ユーザーまたは BASIC アカウントを RAM ロールに関連付けます。

    CREATE USER MAPPING FOR "<RAM user | BASIC account>"
    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;
  • 外部データベースに関する操作の詳細については、「EXTERNAL DATABASE」をご参照ください。

  • 外部スキーマに関する操作の詳細については、「EXTERNAL SCHEMA」をご参照ください。

  • 外部テーブルに関する操作の詳細については、「EXTERNAL TABLE」をご参照ください。

外部テーブルの統計情報の収集

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';

タイムトラベルクエリ

V3.2 以降のバージョンでは、Hologres がタイムスタンプ、バージョン、またはタグに基づく Paimon テーブルの履歴スナップショットクエリをサポートしており、データのタイムトラベルを可能にします。また、Paimon の Snapshots および Tags システムテーブルをクエリすることで、対象テーブルのスナップショット詳細を取得することも可能です。システムテーブルの詳細については、「Paimon システムテーブル」をご参照ください。

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

テーブルスキーマ ID。

schema_id

commit_kind

TEXT

テーブルデータのコミットタイプ。

commit_kind

commit_time

TIMESTAMPTZ

コミット時間。

commit_time

extend_info

TEXT(JSON)

Paimon Snapshots システムテーブルの残りのプロパティ。

Paimon Snapshots システムテーブルの残りのプロパティ

Paimon Snapshots システムテーブルは、hologres.hg_list_versions 関数を用いてもクエリできます。Paimon テーブルのクエリにおいて、Version は Snapshot ID に対応します。

SELECT * FROM hologres.hg_list_versions('EXT_DATABASE_NAME.<span class="var-span" contenteditable="true" data-var="EXT_SCHEMA_NAME">EXT_SCHEMA_NAME.EXT_TABLE_NAME'</span>);

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

テーブルスキーマ ID。

schema_id

commit_time

TIMESTAMPTZ

送信時間

commit_time

extend_info

TEXT(JSON)

Paimon Tag システムテーブルの残りのプロパティ。

Paimon Tag システムテーブルの残りのプロパティ

タイムスタンプに基づく Paimon 履歴スナップショットのクエリ

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

バージョンに基づく Paimon 履歴スナップショットのクエリ

Paimon テーブルでは、Version は Snapshot ID に対応します。

SELECT * FROM '<span class="var-span" contenteditable="true" data-var="EXT_DATABASE_NAME">EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME'</span> FOR VERSION AS OF '<span class="var-span" contenteditable="true" data-var="VERSION">VERSION'</span>;

タグに基づく Paimon 履歴スナップショットのクエリ

SELECT * FROM '<span class="var-span" contenteditable="true" data-var="EXT_DATABASE_NAME">EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME'</span> FOR TAG AS OF '<span class="var-span" contenteditable="true" data-var="TAG">TAG'</span>;

ブランチクエリ

V3.2 以降のバージョンでは、Hologres が Paimon テーブルの指定ブランチからデータをクエリすることをサポートしており、ブランチフォールバック機能もサポートしています。Paimon ブランチの詳細については、「ブランチの管理」をご参照ください。

クエリ ブランチ システムテーブル

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

ブランチシステムテーブルのフィールドは、Paimon システムテーブルのフィールドと以下のように対応します:

フィールド

説明

対応する Paimon システムテーブルのフィールド

branch_name

TEXT

ブランチ名。

branch_name

create_time

TIMESTAMPTZ

ブランチ作成時間。

create_time

extend_info

TEXT(JSON)

Paimon ブランチシステムテーブルの残りのプロパティ。

Paimon ブランチシステムテーブルの残りのプロパティ

指定ブランチのデータのクエリ

SELECT * FROM '<span class="var-span" contenteditable="true" data-var="EXT_DATABASE_NAME">EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME'</span> FOR branch AS OF '<span class="var-span" contenteditable="true" data-var="TAG">TAG'</span>;
説明

Paimon テーブルで scan.fallback-branch プロパティが設定されている場合、クエリジョブが現在のブランチからデータを読み取り、あるパーティションが欠落していると検出された際、リーダーはそのパーティションのデータをフォールバックブランチから読み取ろうと試みます。フォールバックブランチの詳細については、「ブランチの管理」をご参照ください。

指定ブランチの履歴スナップショットのクエリ

-- タイムスタンプに基づくクエリ
SELECT * FROM '<span class="var-span" contenteditable="true" data-var="EXT_DATABASE_NAME">EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME'</span> FOR branch AS OF '<span class="var-span" contenteditable="true" data-var="BRANCH_NAME">BRANCH_NAME'</span> TIMESTAMP AS OF '<span class="var-span" contenteditable="true" data-var="TIMESTAMP">TIMESTAMP'</span>;

-- タグに基づくクエリ
SELECT * FROM '<span class="var-span" contenteditable="true" data-var="EXT_DATABASE_NAME">EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME'</span> FOR branch AS OF '<span class="var-span" contenteditable="true" data-var="BRANCH_NAME">BRANCH_NAME'</span> TAG AS '<span class="var-span" contenteditable="true" data-var="TAG_NAME">TAG_NAME'</span>;

レイクテーブルイメージによるアクセラレーション

V3.2 以降のバージョンでは、Hologres がレイクテーブルイメージ機能をサポートしており、データレイククエリを高速化します。この機能はメタデータおよびデータイメージをサポートし、外部データソースからの変更をニアリアルタイムまたは指定間隔で Hologres に同期します。また、全テーブルイメージおよびパーティションテーブルの部分イメージもサポートします。パラメーターを用いて、イメージデータの範囲を柔軟に制御できます。詳細については、「レイクテーブルイメージ」をご参照ください。

外部テーブルを用いた Paimon テーブルの利用

  1. 外部サーバーを作成します。

    外部サーバーに関する操作の詳細については、「その他の外部サーバー操作(SQL メソッド)」をご参照ください。

    DLF 構文

    説明

    この構文は、DLF サービス V2.5 以降に適用されます。

    SQL 構文は以下のとおりです:

    -- 外部サーバーの作成
    CREATE SERVER IF NOT EXISTS SERVER_NAME FOREIGN DATA WRAPPER dlf_fdw OPTIONS (
        catalog_type 'paimon',
        metastore_type 'dlf-rest', 
        dlf_catalog '<span class="var-span" contenteditable="true" data-var="DLF_CATALOG_NAME">DLF_CATALOG_NAME'</span>
    );

    DLF 1.0 構文

    説明

    この構文は、DLF サービス V1.0 に適用されます。

    SQL 構文は以下のとおりです:

    -- 外部サーバーの作成
    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 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 は、1 つ以上のベーステーブルから集約されたデータを自動的に処理・格納し、組み込みのデータリフレッシュ戦略を備えています。ビジネス要件に応じて異なるデータリフレッシュ戦略を設定することで、ベーステーブルから 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 * FROM EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME;

DML 操作

INSERT INTO

-- Paimon プライマリキー テーブルを作成し、Hologres SQL を用いてデータを挿入

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' -- これは一例のバケット数です。
);

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

-- Paimon 追加専用テーブルを作成し、Hologres SQL を用いてデータを挿入

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;