V3.2 以降、Hologres は Data Lake Formation (DLF) カタログを経由して Paimon テーブルにアクセスできます。DLF カタログを外部データベースまたは外部サーバーにマップすることで、Hologres のネイティブストレージにデータを移行することなく、SQL で Paimon テーブルのクエリ、書き込み、タイムトラベルを実行できます。
注意事項
バージョン別の機能:
|
機能 |
最小バージョン |
|
外部データベース経由の Paimon テーブルの読み取り |
V3.2 |
|
タイムトラベル、ブランチクエリ、データミラーリング |
V3.2 |
|
動的テーブル (全量、増分、自動リフレッシュ) |
V3.2 |
|
Paimon プライマリキー テーブルへの書き込み ( |
V4.0 |
|
期限切れスナップショットに対応するタグからのデータ読み取り |
V3.2.6 / V4.0.6 |
|
Paimon Blob データの読み取りと書き込み (Hologres の |
V4.2 |
|
Paimon テーブルのビットマップファイルインデックス (インデックス形式 V2) を直接読み取り、等価 (=) および IN クエリで無関係な行をスキップします。デフォルトで有効です。詳細は、「ビットマップファイルインデックスによるクエリの高速化」をご参照ください。 |
V5.0 |
主な制限事項:
-
DLF サービスは、Hologres インスタンスと同じリージョンに存在する必要があります。
-
タイムトラベル、ブランチクエリ、データミラーリングは、外部データベース経由でマップされた外部テーブルでのみ利用できます。外部サーバー経由で作成された外部テーブルではサポートされていません。
-
タイムトラベルは、スキーマ進化を伴うテーブルや動的テーブルクエリではサポートされていません。
-
データミラーリングは、Paimon プライマリキー テーブルをサポートしていません。
-
読み取り専用レプリカインスタンスは、データレイクアクセラレーションをサポートしていません。
-
Paimon 動的バケット化 テーブル (
bucket = -1で作成、またはbucketパラメーターなしで作成) への書き込みはサポートされていません。 -
外部テーブルでは
TRUNCATEはサポートされていません。代わりに、空のデータでINSERT OVERWRITEを使用してください。 -
UPDATEとDELETEは、Merge Engine がdeduplicateまたはpartial-updateである主キーテーブルでのみサポートされます。主キー列の更新はサポートされていません。 -
partial-updateテーブルの場合、DELETEを実行する前にpartial-update.remove-record-on-deleteプロパティを有効にしてください。 -
外部テーブルは、混合 DML トランザクションをサポートしていません。単一の DML 操作のみが 2 フェーズコミットプロトコルを使用して原子性を保証します。
-
デフォルトのパーティションデータ (空または NULL のパーティション値) は、Paimon から読み取ることができません。
-
ビットマップファイルインデックスは、等価 (
=) およびIN述語にのみ適用されます。範囲述語 (>、<、BETWEEN) およびパターンマッチング (LIKE) では使用されません。 -
列は、
file-index.bitmap.columnsテーブルプロパティで宣言された場合にのみビットマップファイルインデックスを取得します。宣言されていない列には、ビットマップによる高速化は適用されません。 -
FLOAT、DOUBLE、DECIMALデータ型は、ビットマップファイルインデックスでインデックス化できません。
前提条件
次の前提条件を満たしていることを確認してください:
-
DLF サービス V2.5 以降が有効化され、DLF カタログが作成されていること。 詳細については、「DLF の認可と有効化」および「データカタログ」をご参照ください。
DLF サービスエンドポイントについては、「サービスエンドポイント」をご参照ください。
-
データレイクアクセラレーションサービスが有効な Hologres インスタンスがあること。 詳細については、「Hologres インスタンスの購入」および「DLF を使用した OSS アクセスのためのデータレイクアクセラレーション」をご参照ください。
V5.0 以降、Hologres はデフォルトでデータレイクアクセラレーションを有効にします。 無効にするには、Hologres コンソール を使用します。
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 Quick Authorization ページで SLR を手動で作成してください。
-
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'; -
外部データベース内のスキーマとテーブルを一覧表示します。
-- スキーマを一覧表示 SELECT * FROM hologres.hg_external_schemas('<ext_database_name>'); -- スキーマ内のテーブルを一覧表示 SELECT * FROM hologres.hg_external_tables('<ext_database_name>', '<ext_schema_name>'); -
テーブルデータをクエリします。
SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
STS モード
セキュリティトークンサービス (STS) は、スコープと有効期間が制限された一時的な認証情報を発行します。クロスアカウントアクセスの場合、または BASIC アカウントがカタログにアクセスする必要がある場合は、STS モードを使用します。
-
RAM コンソールで RAM ロールを作成し、
AliyunDLFFullAccessまたはAliyunDLFReadOnlyAccess権限を付与してください。詳細については、「RAM ロールの作成と権限の付与」をご参照ください。 -
RAM ロールの信頼ポリシーを更新して、Hologres がそれを引き受けられるようにしてください。詳細については、「RAM ロールの信頼ポリシーの変更」をご参照ください。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "hologres.aliyuncs.com" ] } } ], "Version": "1" } -
Data Lake Formation コンソール で、DLF カタログ内のターゲットデータベースおよびテーブルへのアクセス権を RAM ロールに付与してください。
-
Hologres で外部データベースを作成し、RAM ロールを認証ポリシーとして指定してください。
パラメータ
必須
説明
catalog_typeはい
paimonに設定します。metastore_typeはい
DLF V2.5 以降の場合は
dlf-restに設定します。dlf_catalogはい
マップする DLF カタログの名前。
rolearnはい
引き受ける RAM ロールの 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'; -
RAM ユーザーまたは BASIC アカウントを RAM ロールに関連付けるためのユーザーマッピングを作成してください。
- ユーザーマッピングの構文については、「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>' ); -
RAM ユーザーとして Hologres コンソール にログインするか、BASIC アカウントとして Hologres インスタンスに再接続してから、クエリを実行してください。
SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
その他の操作:
-
外部データベース: EXTERNAL DATABASE
-
エクスターナルスキーマ: EXTERNAL SCHEMA
-
エクスターナルテーブル: EXTERNAL TABLE
外部サーバーの使用 (レガシー)
外部サーバーアプローチは、タイムトラベル、ブランチクエリ、データミラーリングをサポートしていません。 これらの機能には外部データベースを使用してください。
ステップ 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>'
);
|
パラメータ |
必須 |
説明 |
|
|
はい |
|
|
|
はい |
DLF V2.5 以降の場合は |
|
|
はい |
マップする DLF カタログの名前。 |
DLF V1.0 の場合:
CREATE SERVER IF NOT EXISTS <server_name> FOREIGN DATA WRAPPER dlf_fdw OPTIONS (
dlf_region '<region_id>',
dlf_endpoint 'dlf-share.<region>.aliyuncs.com',
oss_endpoint 'oss-<region_id>-internal.aliyuncs.com',
dlf_catalog '<dlf_catalog_name>'
);
|
パラメータ |
必須 |
説明 |
|
|
はい |
DLF サービスのリージョン ID。 |
|
|
はい |
DLF サービスのエンドポイント。フォーマット: |
|
|
はい |
OSS の内部エンドポイント。フォーマット: |
|
|
はい |
マップする 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 と AUTO ANALYZE」をご参照ください。
タイムトラベルを使用したクエリ
V3.2 以降、Hologres は、タイムスタンプ、バージョン (スナップショット ID) 、またはタグを使用して Paimon テーブルの履歴スナップショットをクエリできます。
タイムトラベルは、外部データベース経由でマップされた外部テーブルでのみサポートされます。スキーマエボリューションのあるテーブルや動的テーブルを使用したクエリではサポートされていません。
利用可能なスナップショットの一覧表示:
SELECT * FROM hologres.hg_list_snapshots('<ext_database_name>.<ext_schema_name>.<ext_table_name>');
snapshots テーブルは次のフィールドを返します:
|
フィールド |
型 |
説明 |
|
|
TEXT |
ブランチ名 |
|
|
TEXT |
スナップショット ID |
|
|
TEXT |
スキーマ ID |
|
|
TEXT |
コミットの種類 |
|
|
TIMESTAMPTZ |
コミット時刻 |
|
|
TEXT (JSON) |
その他の Paimon スナップショットプロパティ |
hg_list_versions 関数を使用して Paimon の snapshots システムテーブルをクエリすることもできます。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>');
|
フィールド |
型 |
説明 |
|
|
TEXT |
ブランチ名 |
|
|
TEXT |
タグ名 |
|
|
TEXT |
スナップショット ID |
|
|
TEXT |
スキーマ ID |
|
|
TIMESTAMPTZ |
コミット時刻 |
|
|
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 ブランチのクエリ
V3.2 以降、Hologres は特定の Paimon ブランチからデータをクエリできます。これには、そのブランチ内の履歴スナップショットも含まれます。
利用可能なブランチの一覧表示:
SELECT * FROM hologres.hg_list_branches('<ext_database_name>.<ext_schema_name>.<ext_table_name>');
|
フィールド |
型 |
説明 |
|
|
TEXT |
ブランチ名 |
|
|
TIMESTAMPTZ |
ブランチ作成時刻 |
|
|
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>';
レイクテーブルミラーリングによるクエリの高速化
V3.2 以降、Hologres はレイクテーブルミラーリングをサポートします。この機能は、Paimon テーブルのメタデータとデータをほぼリアルタイムまたはスケジュールされた間隔で Hologres に同期します。ミラーリングされたデータは Hologres ストレージから提供されるため、クエリレイテンシーが大幅に削減されます。テーブル全体のミラーリングと、パーティション化されたテーブルの部分的なミラーリングの両方がサポートされています。
レイクテーブルミラーリングは、Paimon プライマリキーテーブルをサポートしていません。
設定の詳細については、「レイクテーブルミラーリング」をご参照ください。
ビットマップファイルインデックスによるクエリの高速化
V5.0 以降、Hologres は Paimon テーブル上のビットマップファイルインデックス (インデックス形式 V2) を直接読み取ります。インデックス付きの列を等価 (=) または IN 述語でフィルタリングすると、Hologres リーダーはビットマップを使用して一致する行を特定し、無関係な行をスキップします。これにより、スキャンされるデータ量が削減され、レイクテーブルに対するポイントクエリと複数値クエリが高速化されます。この機能はデフォルトで有効になっています。
file-index.bitmap.columns は Paimon テーブルのプロパティです。このプロパティは、レイク内のデータファイルの隣に保存されるファイルレベルのビットマップインデックスを制御し、Hologres がレイクテーブルを直接読み取る際にフィルターをそのインデックスにプッシュダウンできるようにします。Hologres 内のミラーリングされたテーブルにビットマップインデックスを構築する data_mirroring_bitmap_columns と混同しないでください。詳細については、「レイクテーブルミラーリング」をご参照ください。
仕組みと適用条件:
-
インデックスは Paimon のライターによって生成されます。Flink や Spark などのエンジンがこのインデックスを書き込むことができます。また、Hologres も、テーブルに
file-index.bitmap.columnsが宣言されていれば、Paimon 外部テーブルに対してINSERTを実行する際に自動的にインデックスを生成します。 -
インデックスはデータファイルごとに保存されます。各データファイルには、データファイル名をプレフィックスとする
.indexファイルが付属します。 -
Hologres リーダーはインデックス形式のバージョンを自動的に検出し、両方の形式が同じテーブル内に共存できます。インデックス形式 V2 は V2 パーサーを使用し、インデックス形式 V1 は V1 パーサーを引き続き使用します。既存のクエリに影響はありません。
-
サポートされているインデックス列の型には、固定長型 (
SMALLINT、INT、BIGINT、DATE、TIME、TIMESTAMPなど) と可変長型 (STRINGまたはTEXT) があります。FLOAT、DOUBLE、DECIMALはサポートされていません。 -
等価 (
=) 述語とIN述語のみが高速化の対象となります。範囲述語、LIKE、その他の述語はビットマップインデックスを使用しません。
手順:
-
テーブルを作成するときに、ビットマップインデックス列を宣言します。
-- Paimon 外部テーブルを作成し、ビットマップインデックス列を宣言します CREATE EXTERNAL TABLE EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME ( id INT, c_id INT, c_name TEXT ) WITH ( "table_format" = 'paimon', "file_format" = 'parquet', -- Parquet と ORC の両方がビットマップファイルインデックスの読み取りをサポートします "bucket" = '4', "bucket-key" = 'id', "file-index.bitmap.columns" = 'c_id,c_name' -- インデックスを作成する列 (カンマ区切り) );説明特定の列をインデックス形式 V1 にダウングレードするには、その列に対して
"file-index.bitmap.<COLUMN_NAME>.version" = '1'を設定します。デフォルトはインデックス形式 V2 です。 -
ビットマップファイルインデックスのフラグが有効になっていることを確認します。Hologres は V5.0 以降、次のフラグをデフォルトでオンにします。状態を確認したり、手動でオンにしたりするには、次を実行します:
-- ビットマップファイルインデックスの読み取りを制御するグローバルフラグ SELECT hg_admin_command('set_global_flag','enable_paimon_bitmap_index=true'); -- マスター スイッチ SELECT hg_admin_command('set_global_flag','enable_push_bitmap_to_fse_parquet_reader=true'); -- Parquet リーダーでのプッシュダウン SELECT hg_admin_command('set_global_flag','enable_push_bitmap_to_fse_orc_reader=true'); -- ORC リーダーでのプッシュダウン -
等価クエリまたは
INクエリを実行し、EXPLAIN (ANALYZE)でインデックスが有効になったことを確認します。-- クエリと検証 EXPLAIN (ANALYZE) SELECT count(*) FROM EXT_DATABASE_NAME.EXT_SCHEMA_NAME.EXT_TABLE_NAME WHERE c_id = 1;クエリプランでは、最下層の
Seq Scanノードがbitmap_used=Nを報告します。ここで N はビットマップインデックスによって処理された述語の数です。scan_rowsは、テーブル全体の行数ではなく、一致する行数に近くなります。これらの指標はいずれも、インデックスが有効になったことを示します。出力例:-> Seq Scan on EXT_TABLE_NAME (cost=0.00..5.03 rows=1000 width=1) Filter: (c_id = 1) Engine: FSE Foreign Table Type: DLF [id=1 split_count=1 rows=4(4/4/4) scan_rows=4(4/4/4) bitmap_used=1]
ビットマップファイルインデックスは、データファイルごとに有効になります。最高の高速化効果を得るには、フィルター列の値をできるだけ少ないデータファイルに集中させてください。バケットテーブルでは、インデックスは各バケットのデータファイル内で独立して適用されます。
動的テーブルを使用した継続的なリフレッシュ
動的テーブルは、1 つ以上の Paimon 外部テーブルからの集計結果を自動的に処理して保存します。また、組み込みのリフレッシュ戦略も備えています。MaxCompute 外部テーブルと DLF 外部テーブルは、V3.0 以降、ベーステーブルとしてサポートされています。
動的テーブルは、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 EngineがFirst 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;