テーブルの作成
Paimon* テーブルの作成は allow_experimental_paimon_storage_engine で制限されており (デフォルトでは無効) 、CREATE TABLE を実行する前にこれを有効にしてください。
エンジン引数
S3、AzureBlobStorage、HDFS、File エンジンの引数の説明と同じです。
format は、Paimon テーブル内のデータファイルのフォーマットを表します。
エンジンパラメータは、名前付きコレクション を使用して指定できます
例
機能
- 最新のテーブルスナップショットからスナップショット読み取りを行います。
- 有効化されている場合、コミット済みスナップショット ID に基づくインクリメンタル読み取りを行います。
use_paimon_partition_pruningが有効な場合、パーティションプルーニングを行います。- 設定されている場合、メタデータをバックグラウンドで任意に更新できます。
- Atomic/Replicated データベースを使用している場合、テーブル UUID が安定するため、Keeper のパスで
{uuid}マクロを使用できます。
設定
allow_experimental_paimon_storage_engine—Paimon、PaimonS3、PaimonAzure、PaimonHDFS、PaimonLocalテーブルエンジンの作成を有効にします。デフォルト:0(無効) 。paimon_incremental_read— インクリメンタル読み取りモードを有効にします。paimon_metadata_refresh_interval_sec— バックグラウンドでのメタデータのリフレッシュ間隔 (秒) 。0 より大きい値に設定すると、バックグラウンドタスクが定期的にオブジェクトストレージから最新のスナップショットとスキーマを取得します。デフォルト: 30。paimon_keeper_path— インクリメンタル読み取り状態のための Keeper パス。設定は必須で、テーブルごとに一意である必要があります。{database}、{table}、{uuid}などのマクロをサポートします。paimon_replica_name— インクリメンタル読み取り状態のためのレプリカ名。設定は必須で、レプリカごとに一意である必要があります。{replica}などのマクロをサポートします。
インクリメンタル読み取りの例
インクリメンタル読み取りのクエリレベル設定
CREATE TABLE ではなく SELECT ... SETTINGS で指定します) 。インクリメンタル読み取りのクエリごとの動作を制御します。
paimon_target_snapshot_id— 指定したスナップショットの差分のみを読み取ります。Keeper 内のコミット済みウォーターマークは進まないため、同じスナップショットを何度でも再読み取りできます。デフォルト:-1(無効) 。max_consume_snapshots— 1 回のインクリメンタル読み取りで取り込むスナップショットの最大数。ソースに未読のスナップショットが多数たまっている場合、クエリごとに取り込む数を制限してバッチサイズを制御します。0は無制限を意味します。デフォルト:0。
リフレッシャブルmaterialized view を介した Paimon から MergeTree への同期
APPEND モードのリフレッシャブルMaterialized Viewを使用すると、Paimon テーブルから MergeTree テーブルへデータを継続的に同期するエンドツーエンドのパイプラインを構築できます。各リフレッシュサイクルでは、Paimon から新しいインクリメンタルデータのみを読み取り、それを宛先テーブルに追記します。
ステップ 1 — インクリメンタル読み取りとメタデータのリフレッシュを有効にした Paimon のソーステーブルを作成します。
以下の例では PaimonLocal を使用します。ストレージバックエンドに応じて、engine を PaimonS3、PaimonAzure、PaimonHDFS、または Paimon 別名 に置き換えてください。
paimon_metadata_refresh_interval_sec は、バックグラウンドでのメタデータのリフレッシュ間隔を秒単位で設定します。0 より大きい場合、バックグラウンドタスクがオブジェクトストレージから最新のスナップショットとスキーマを定期的に取得するため、クエリによってメタデータ更新がトリガーされるのを待たなくても、MV のリフレッシュサイクルで新たにコミットされたデータを参照できます。デフォルトは 30 です。オブジェクトストレージや Keeper の I/O が過剰にならないよう、多数のテーブルで使用する場合は注意してください。
ステップ 2 — MergeTree の宛先テーブルを作成します (スキーマは Paimon テーブルから複製) :
SELECT * FROM paimon_mv_source を実行します。これにより、前回コミットされたスナップショット以降に追加された行のみが返され、それらが paimon_mv_dest に追記されます。
クリーンアップ:
バックグラウンドでの更新によってDDL操作がブロックされるのを防ぐため、削除する前にMVを停止してください。
制限事項
- インクリメンタル読み取りを行うには、Keeper (ZooKeeper) が設定されている必要があります。
- インクリメンタル読み取りを行うには、
paimon_keeper_pathを設定し、テーブルごとに一意にする必要があります。 paimon_replica_nameは、同じ Keeper パス 内でレプリカごとに一意でなければなりません。- インクリメンタル読み取りでは at-most-once 配信が使われます。コミット済みスナップショットは、データが実際に消費される前、データファイルの収集時点で進められます。ファイル収集後にクエリが失敗した場合、スキップされたスナップショットは再試行しても再度読み取られません。
- このテーブルエンジンは読み取り専用で、データの変更はサポートされていません。
- インクリメンタル読み取りでは、Paimon ソースの過去データの削除は扱われません。アップストリームの Paimon データが削除または更新されても、ClickHouse の MergeTree 宛先テーブルにすでに書き込まれている対応する行は自動では削除されません。古くなったデータをクリーンアップするには、MergeTree テーブルに対して
ALTER TABLE ... DELETEを手動で実行する必要があります。
別名
Paimon は PaimonS3 の別名です。
仮想カラム
_path— ファイルのパス。型:LowCardinality(String)._file— ファイル名。型:LowCardinality(String)._size— ファイルサイズ (バイト単位) 。型:Nullable(UInt64). ファイルサイズが不明な場合、値はNULLです。_time— ファイルの最終更新時刻。型:Nullable(DateTime). 最終更新時刻が不明な場合、値はNULLです。_etag— ファイルの etag。型:LowCardinality(String). etag が不明な場合、値はNULLです。
対応しているデータ型
| Paimon データ型 | ClickHouse データ型 |
|---|---|
| BOOLEAN | Int8 |
| TINYINT | Int8 |
| SMALLINT | Int16 |
| INTEGER | Int32 |
| BIGINT | Int64 |
| FLOAT | Float32 |
| DOUBLE | Float64 |
| STRING,VARCHAR,BYTES,VARBINARY | String |
| DATE | Date |
| TIME(p),TIME | Time(‘UTC’) |
| TIMESTAMP(p) WITH LOCAL TIME ZONE | DateTime64 |
| TIMESTAMP(p) | DateTime64(‘UTC’) |
| CHAR | FixedString(1) |
| BINARY(n) | FixedString(n) |
| DECIMAL(P,S) | Decimal(P,S) |
| ARRAY | Array |
| MAP | Map |
サポートされるパーティションキー
CHARVARCHARBOOLEANDECIMALTINYINTSMALLINTINTEGERDATETIMETIMESTAMPTIMESTAMP WITH LOCAL TIME ZONEBIGINTFLOATDOUBLE