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

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

最終更新日:Jun 04, 2026

Hologres V3.2 以降では、Data Lake Formation (DLF) カタログで管理されている Paimon テーブルへのアクセスがサポートされています。DLF カタログを外部データベースまたは外部サーバーにマッピングすることで、データを Hologres のネイティブストレージに移行することなく、SQL を使用して Paimon テーブルのクエリ、書き込み、タイムトラベルが可能になります。

注意事項

バージョン別の機能:

機能

最小バージョン

外部データベース経由での Paimon テーブル読み取り

V3.2

タイムトラベル、ブランチクエリ、データミラーリング

V3.2

動的テーブル(フル更新、増分更新、自動更新)

V3.2

Paimon プライマリキーテーブルへの書き込み (INSERT INTOINSERT OVERWRITEUPDATEDELETE)

V4.0

期限切れスナップショットに対応するタグからのデータ読み取り

V3.2.6 / V4.0.6

Paimon Blob データの読み書き(Hologres の BYTES データ型にマッピング)

V4.2

主な制限事項:

  • DLF サービスは、Hologres インスタンスと同じリージョン内にある必要があります。

  • タイムトラベル、ブランチクエリ、データミラーリングは、外部データベース経由でマッピングされた外部テーブルでのみ利用可能です。外部サーバー経由で作成された外部テーブルでは利用できません。

  • スキーマ進化が行われたテーブルや、動的テーブルクエリでは、タイムトラベルはサポートされていません。

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

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

  • 動的バケット化テーブル(bucket = -1 または bucket パラメーターなしで作成されたテーブル)への書き込みはサポートされていません。

  • 外部テーブルでは TRUNCATE がサポートされていません。INSERT OVERWRITE を使用して空のデータで上書きしてください。

  • UPDATE および DELETE は、マージエンジンが deduplicate または partial-update のプライマリキーテーブルでのみサポートされます。プライマリキー列の更新はサポートされていません。

  • partial-update テーブルに対して DELETE を実行する前に、partial-update.remove-record-on-delete プロパティを有効にしてください。

  • 外部テーブルでは、複数の DML 操作を含むトランザクションはサポートされていません。単一の DML 操作のみが、原子性を保証するために二相コミットプロトコルを使用します。

  • Paimon からデフォルトパーティションデータ(空または NULL パーティション値)を読み取ることはできません。

前提条件

作業を開始する前に、以下の条件を満たしていることを確認してください。

DLF カタログへの接続

Hologres では、DLF カタログへの接続方法として以下の 2 つのアプローチがサポートされています。

アプローチ

推奨用途

外部データベース(推奨)

ほとんどのユースケースに適しています。タイムトラベル、ブランチクエリ、データミラーリングをサポートします。V3.2 以降が必要です。

外部サーバー(レガシ)

DLF 1.0 環境、またはタイムトラベルを必要としないワークロード向けです。

外部データベースの使用(推奨)

外部データベースは、DLF カタログを Hologres 内にマッピングすることで、Paimon テーブルのクエリ、管理、ミラーリングを可能にします。以下の 2 つの認証モードをサポートしています。

モード

使用タイミング

SLR モード(デフォルト)

現在の Alibaba Cloud ID を使用してカタログにアクセスします。シングルアカウント構成に適しています。

STS モード

クロスアカウントアクセス、または Hologres BASIC アカウントがカタログにアクセスする必要がある場合に使用します。

SLR モード

サービスリンクロール (SLR) を使用すると、Hologres は現在の ID を使って他の Alibaba Cloud サービスに代わってアクセスできます。V2.2 以降に新規購入またはスペックアップされたインスタンスでは、SLR が自動的に作成されます。

V2.2 より前のバージョンで実行中のインスタンスについては、RAM クイック承認ページで手動で SLR を作成してください。
  1. Hologres インスタンスに接続し、外部データベースを作成します。

    パラメーター

    必須

    説明

    catalog_type

    はい

    paimon に設定します。

    metastore_type

    はい

    DLF V2.5+ の場合は dlf-rest に設定します。

    dlf_catalog

    はい

    マッピングする DLF カタログの名前です。

    comment

    いいえ

    外部データベースの説明です。

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

       -- スキーマの一覧表示
       SELECT * FROM hologres.hg_external_schemas('<ext_database_name>');
    
       -- スキーマ内のテーブル一覧表示
       SELECT * FROM hologres.hg_external_tables('<ext_database_name>', '<ext_schema_name>');
  3. テーブルデータをクエリします。

       SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;

STS モード

セキュリティトークンサービス (STS) は、限定された範囲と有効期間を持つ一時的な認証情報を発行します。クロスアカウントアクセスや、BASIC アカウントがカタログにアクセスする必要がある場合に STS モードを使用します。

  1. RAM コンソールで RAM ロールを作成し、AliyunDLFFullAccess または AliyunDLFReadOnlyAccess 権限を付与します。「RAM ロールの作成と権限付与」をご参照ください。

  2. RAM ロールの信頼ポリシーを更新して、Hologres がこれを偽装できるようにします。詳細については、「RAM ロールの信頼ポリシーを編集する」をご参照ください。

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

  4. Hologres で外部データベースを作成し、認証ポリシーとして RAM ロールを指定します。

    パラメーター

    必須

    説明

    catalog_type

    はい

    paimon に設定します。

    metastore_type

    はい

    DLF V2.5+ の場合は dlf-rest に設定します。

    dlf_catalog

    はい

    マッピングする DLF カタログの名前です。

    rolearn

    はい

    偽装する RAM ロールの Amazon リソースネーム (ARN) です。形式: acs:ram::<account_id>:role/<role_name>

    comment

    いいえ

    外部データベースの説明です。

       CREATE EXTERNAL DATABASE <ext_database_name> WITH
         catalog_type 'paimon',
         metastore_type 'dlf-rest',
         dlf_catalog '<dlf_catalog_name>',
         rolearn 'acs:ram::<account_id>:role/<role_name>',
         comment 'dlf catalog';
  5. RAM ユーザーまたは BASIC アカウントを RAM ロールに関連付ける USER MAPPING を作成します。

    - USER MAPPING 構文については、「CREATE USER MAPPING」をご参照ください。 - RAM ユーザーを作成するには、「RAM ユーザーを作成する」をご参照ください。 - BASIC アカウントを作成するには、「ユーザー管理」をご参照ください。
       CREATE USER MAPPING FOR "<ram_user_or_basic_account>"
       EXTERNAL DATABASE <ext_database_name>
       OPTIONS
       (
         rolearn 'acs:ram::<account_id>:role/<role_name>'
       );
  6. RAM ユーザーとして Hologres コンソール にログインするか、BASIC アカウントとして Hologres インスタンスに再接続し、クエリを実行します。

       SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;

その他の操作:

外部サーバーの使用(レガシ)

外部サーバーアプローチでは、タイムトラベル、ブランチクエリ、データミラーリングはサポートされていません。これらの機能を使用するには、外部データベースを使用してください。

ステップ 1: 外部サーバーの作成

DLF V2.5 以降の場合:

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

パラメーター

必須

説明

catalog_type

はい

paimon に設定します。

metastore_type

はい

DLF V2.5+ の場合は dlf-rest に設定します。

dlf_catalog

はい

マッピングする DLF カタログの名前です。

DLF V1.0 の場合:

CREATE SERVER IF NOT EXISTS <server_name> FOREIGN DATA WRAPPER dlf_fdw OPTIONS (
  dlf_region '',
  dlf_endpoint 'dlf-share.<region>.aliyuncs.com',
  oss_endpoint 'oss-<region_id>-internal.aliyuncs.com',
  dlf_catalog '<dlf_catalog_name>'
);

パラメーター

必須

説明

dlf_region

はい

DLF サービスのリージョン ID です。

dlf_endpoint

はい

DLF サービスのエンドポイントです。形式: dlf-share.<region>.aliyuncs.com

oss_endpoint

はい

OSS 内部エンドポイントです。形式: oss-<region_id>-internal.aliyuncs.com

dlf_catalog

はい

マッピングする DLF カタログの名前です。

外部サーバーのその他の操作については、「外部サーバーのその他の操作」をご参照ください。

ステップ 2: 外部テーブルの作成

IMPORT FOREIGN SCHEMA を使用して、DLF データベース内のすべてのテーブルをインポートします。

-- すべてのテーブルをインポート
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 <foreign_table_name>
(
  <column_name> <data_type>
  [, ...]
)
SERVER <server_name>
OPTIONS
(
  schema_name '<dlf_db_name>',
  table_name '<dlf_table_name>'
);

構文の詳細については、「IMPORT FOREIGN SCHEMA」および「CREATE FOREIGN TABLE」をご参照ください。

Paimon データの読み取り

クエリ最適化のための統計情報収集

ANALYZE または AUTO ANALYZE を実行してテーブルの統計情報を収集します。クエリ オプテマイザーは、これらの統計情報を使用して最適なクエリプランを構築します。

-- すべての列の統計情報を収集
ANALYZE <ext_database_name>.<ext_schema_name>.<ext_table_name>;

-- 特定の列の統計情報を収集(より正確。フィルター列に使用)
ANALYZE <ext_database_name>.<ext_schema_name>.<ext_table_name>(<col_name>[, <col_name>]);

-- 外部データベースで AUTO ANALYZE を有効化
ALTER EXTERNAL DATABASE <ext_database_name> WITH enable_auto_analyze 'true';

詳細については、「ANALYZE and AUTO ANALYZE」をご参照ください。

タイムトラベルによるクエリ

Hologres V3.2 以降では、タイムスタンプ、バージョン(スナップショット ID)、またはタグによって Paimon テーブルの履歴スナップショットをクエリできます。

重要

タイムトラベルは、外部データベース経由でマッピングされた外部テーブルでのみサポートされます。スキーマ進化が行われたテーブルや、動的テーブルクエリではサポートされていません。

利用可能なスナップショットの一覧表示:

SELECT * FROM hologres.hg_list_snapshots('<ext_database_name>.<ext_schema_name>.<ext_table_name>');

スナップショットテーブルは以下のフィールドを返します。

フィールド

説明

branch_name

TEXT

ブランチ名

snapshot_id

TEXT

スナップショット ID

schema_id

TEXT

スキーマ ID

commit_kind

TEXT

コミットタイプ

commit_time

TIMESTAMPTZ

コミット時間

extend_info

TEXT (JSON)

残りの Paimon スナップショットプロパティ

hg_list_versions 関数を使用して、Paimon スナップショットシステムテーブルをクエリすることもできます。Paimon テーブルでは、バージョンはスナップショット ID に対応します。

SELECT * FROM hologres.hg_list_versions('<ext_database_name>.<ext_schema_name>.<ext_table_name>');

利用可能なタグの一覧表示:

SELECT * FROM hologres.hg_list_tags('<ext_database_name>.<ext_schema_name>.<ext_table_name>');

フィールド

説明

branch_name

TEXT

ブランチ名

tag_name

TEXT

タグ名

snapshot_id

TEXT

スナップショット ID

schema_id

TEXT

スキーマ ID

commit_time

TIMESTAMPTZ

コミット時間

extend_info

TEXT (JSON)

残りの Paimon タグプロパティ

タイムスタンプによるクエリ:

SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>
FOR TIMESTAMP AS OF '<timestamp>';

バージョン(スナップショット ID)によるクエリ:

SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>'
FOR VERSION AS OF '<version>';

タグによるクエリ:

SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>'
FOR TAG AS OF '<tag>';
Hologres V3.2.6 および V4.0.6 以降では、期限切れの Paimon スナップショットに対応するタグからのデータ読み取りがサポートされています。

Paimon システムテーブルの詳細については、「Paimon システムテーブル」をご参照ください。

Paimon ブランチのクエリ

Hologres V3.2 以降では、特定の Paimon ブランチからのデータクエリや、ブランチ内の履歴スナップショットのクエリがサポートされています。

利用可能なブランチの一覧表示:

SELECT * FROM hologres.hg_list_branches('<ext_database_name>.<ext_schema_name>.<ext_table_name>');

フィールド

説明

branch_name

TEXT

ブランチ名

create_time

TIMESTAMPTZ

ブランチ作成時間

extend_info

TEXT (JSON)

残りの Paimon ブランチプロパティ

ブランチの現在のデータをクエリ:

SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>'
FOR branch AS OF '<branch_name>';
Paimon テーブルに scan.fallback-branch が設定されている場合、Hologres は自動的にフォールバックブランチから不足しているパーティションを読み取ります。「ブランチの管理」をご参照ください。

ブランチ内の履歴スナップショットをクエリ:

-- タイムスタンプによる
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>'
FOR branch AS OF '<branch_name>' TIMESTAMP AS OF '<timestamp>';

-- タグによる
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>'
FOR branch AS OF '<branch_name>' TAG AS '<tag_name>';

レイクテーブルミラーリングによるクエリの高速化

Hologres V3.2 以降では、レイクテーブルミラーリングがサポートされています。この機能により、Paimon テーブルのメタデータおよびデータがニアリアルタイムまたはスケジュールされた間隔で Hologres に同期されます。ミラーリングされたデータは Hologres ストレージから提供されるため、クエリの待ち時間が大幅に短縮されます。フルテーブルミラーリングと、パーティションテーブルの部分ミラーリングの両方がサポートされています。

重要

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

設定の詳細については、「レイクテーブルミラーリング」をご参照ください。

動的テーブルによる継続的更新の使用

動的テーブルは、1 つ以上の Paimon 外部テーブルから集計結果を自動的に処理・保存し、組み込みの更新戦略を提供します。V3.0 以降では、MaxCompute 外部テーブルおよび DLF 外部テーブルを動的テーブルのベーステーブルとして使用できます。

重要

動的テーブルでは、Paimon テーブルまたはブランチに対するタイムトラベルクエリはサポートされていません。

フル更新 — 各更新サイクルで全データを置き換えます。

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

詳細については、「動的テーブルの概要」をご参照ください。

Paimon テーブルへの書き込み

Hologres V4.0 以降では、外部データベース経由で Paimon プライマリキーテーブルへの書き込みがサポートされています。書き込みプロセスでは、小規模ファイルの生成を抑えるために、バケット単位でデータをシャッフルしてから書き込みを行います。以下のテーブルを含め、キャッシュを必要とするテーブルにはメモリベースのキャッシュ機構がサポートされています。

  • Merge EngineFirst Row に設定されたテーブル

  • lookup 機構を通じてチェンジログを生成するテーブル

  • Deletion Vector が有効化されたテーブル

INSERT INTO

以下の例では、Paimon プライマリキーテーブルを作成し、行を挿入します。

-- 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'             -- 必要に応じて調整
);

-- 行の挿入
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 追加専用テーブルを作成し、パーティションを上書きします。

-- パーティション化された Paimon 追加専用テーブルの作成
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 は、マージエンジンが deduplicate または partial-update の Paimon プライマリキーテーブルでのみサポートされます。プライマリキー列の更新はサポートされていません。

UPDATE <ext_database_name>.<ext_schema_name>.<ext_table_name>
SET amount = 5
WHERE id = 1;

DELETE

DELETE は、マージエンジンが deduplicate または partial-update の Paimon プライマリキーテーブルでのみサポートされます。partial-update テーブルに対して DELETE を実行する前に、partial-update.remove-record-on-delete プロパティを有効にしてください。

DELETE FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>
WHERE id = 2;

次のステップ