このトピックでは、Data Lake Formation (DLF) における Paimon テーブルの管理方法について説明します。
テーブルタイプの概要
特徴 | レイクハウス形式の Paimon テーブルを使用します。リアルタイム処理とバッチ処理を統合したストレージをサポートし、コンピュートエンジンおよびオープンソース API を通じた効率的な読み取り・書き込みアクセスを実現します。 |
適用範囲 | ストリーム処理、リアルタイム更新、および高性能 OLAP クエリ。 |
データ管理 | メタデータおよびデータファイルを含め、すべての管理を DLF が行います。テーブルを削除すると、メタデータとデータの両方が削除されます。 |
ストレージシステム | DLF が UUID を使用してストレージパスを自動生成します。手動でストレージパスを指定する必要はありません。 |
削除時の動作 | デフォルトでは、テーブル削除後 1 日間データを保持し、誤削除のリスクを低減します。1 日経過後にデータは完全に削除されます。 |
マネージド Paimon テーブルの特徴:
完全マネージドなコンパクション:データ書き込みとは独立して実行され、安定性が向上します。
同時書き込み:複数のジョブが同一テーブルの同一パーティションに対して同時に書き込み可能です。
リアルタイムのパーティションレベルメトリクス:レコード数、ファイル数、サイズを含みます。
マルチバージョン対応:タイムトラベルおよび細かい単位での挿入、更新、削除操作を可能にします。
テーブルの作成
まず、Data Lake Formation コンソールにログインします。
データカタログ一覧ページで、カタログ名をクリックしてカタログ詳細ページへ移動します。
データベース一覧から、ご利用のデータベース名をクリックします。
テーブル一覧から、テーブルの作成をクリックします。
以下の設定を構成し、OK をクリックします。
設定項目
説明
テーブルフォーマット
Paimon テーブルを選択します。
テーブル名
必須項目です。データベース内で一意である必要があります。
テーブルの説明
任意項目です。説明文を入力してください。
カラム
カラム名、プライマリキーの有無、NULL 許容の有無、パーティションフィールドの有無、データの型、長さまたは型、説明、および操作を定義します。
ユーザー定義テーブルプロパティ
カスタムプロパティを追加します。これらのプロパティは、テーブル作成時に DLF のグローバルメタサービスのデフォルトパラメーターを上書きします。サポートされる設定項目については、「Apache Paimon ドキュメント」をご参照ください。
説明DLF で作成された Paimon テーブルは、デフォルトで書き込み専用モードで動作します。バックグラウンドでのテーブル最適化(コンパクション、スナップショットのクリーンアップ、パーティションのクリーンアップなど)は、DLF が自動的に処理します。
SQL の例
DLF では、プライマリキー付きテーブルおよび追加専用テーブルの両方をサポートしています。EMR や Flink などの他のプラットフォームで DLF カタログを登録済みの場合、そのプラットフォーム上でデータベースおよびテーブルを作成できます。メタデータは直接 DLF に書き込まれます。詳細については、「エンジン連携」をご参照ください。
プライマリキー付きテーブル
プライマリキー付きテーブルは、プライマリキーを一意の識別子として使用します。これは ストリーム処理シナリオ向けに設計されており、レコードに対する リアルタイム更新、挿入、削除をサポートします。また、ダウンストリームのストリーム消費向けに正確な変更ログを自動生成します。さらに、プライマリキー条件に基づく 効率的なデータクエリもサポートします。
Flink SQL の例
CREATE TABLE orders ( order_id BIGINT, price BIGINT, customer STRING, PRIMARY KEY NOT ENFORCED(order_id) );Spark SQL の例
CREATE TABLE orders ( order_id BIGINT, price BIGINT, customer STRING ) TBLPROPERTIES ( 'primary-key' = 'order_id' );
DLF ではデフォルトで Postpone Bucket モードが使用されます。これは、パーティションのデータ量に応じてバケット数を動的に調整する適応型バケット割り当て戦略です。過剰なバケット数(読み取りパフォーマンス低下)や不足したバケット数(書き込みパフォーマンス低下)によるパフォーマンス問題を回避します。バケット数を手動で設定する必要はありません。ただし、Postpone モードではデータ遅延が発生します。新しく書き込まれたデータは、コンパクションが完了するまで可視化されません。
遅延を回避するには、以下のいずれかの方法を実施してください:
Ververica Runtime (VVR) 11.4+ を使用した Flink、または esr-4.5+ を使用した Spark を利用します。これらのバージョンでは、Postpone モードにおいてバッチを直接バケットに書き込むため、遅延が発生しません。
遅延の影響を受けやすいテーブルについては、バケット数を明示的に設定します。例:
'bucket' = '5'。パーティションあたりのデータ量が 1 GB の場合、1 バケットを推奨します。
システムは、データ特性およびトラフィック負荷に応じてバケット数を動的に調整し、ストレージ効率および読み取り・書き込みパフォーマンスを維持するために、必要に応じて自動スケーリングを実行します。スケーリング戦略の詳細については、以下のセクションをご参照ください。
動的バケット分割および自動スケーリング戦略
その他のビジネス関連の構成については、以下の項目を定義します:
マージエンジン(merge-engine):複雑な計算を実行します。
削除ベクター(deletion-vectors.enabled):クエリパフォーマンスを大幅に向上させます。
説明この機能を有効化すると、バケットモードに関係なく、新しく書き込まれたすべてのデータは、可視化される前にコンパクションを実行する必要があります。
チャネルログプロデューサー(changelog-producer):ダウンストリームのストリーム読み取り向けにチャネルログを生成するため、値を 'lookup' に設定します。
シーケンスフィールド(sequence.field):順序外のデータを処理し、正しい更新順序を保証します。
上流のデータが CDC データである場合は、Flink CDC またはデータ統合製品を使用してレイクにデータを書き込みます。これらのツールは、フルデータベース同期、自動テーブル作成、およびテーブルスキーマ同期を提供します。
プライマリキー付きテーブルにおける高性能 OLAP クエリを実現するには、削除ベクターの有効化を強く推奨します。コンパクションリソースの消費は増加しますが、より安定かつ高性能な OLAP クエリが得られます。
追加専用テーブル
追加専用テーブルは プライマリキーを持ちません。プライマリキー付きテーブルとは異なり、ストリームによる直接更新はサポートされません。ただし、バッチ処理パフォーマンスが著しく優れています。
ストリーム書き込みおよびストリーム読み取りをサポートします。DLF は小規模ファイルを自動的にマージし、低コストでデータのタイムリネスを向上させます。
DELETE、UPDATE、MERGE INTOなどの細かい単位での操作をサポートします。また、バージョン管理およびタイムトラベル機能も提供し、多様なビジネス要件に対応します。ソートおよびビットマップを活用したクエリ高速化をサポートします。OLAP エンジンは、直接読み取り性能において優れた結果を提供します。
プライマリキーがないストリーム処理またはほとんどのバッチ処理シナリオでは、追加専用テーブルをご利用ください。プライマリキー付きテーブルと比較して、追加専用テーブルは使いやすく、効率的なデータ書き込みおよびクエリを実現できます。
Flink SQL の例
CREATE TABLE orders ( order_id BIGINT, price BIGINT, customer STRING );Spark SQL の例
CREATE TABLE orders ( order_id BIGINT, price BIGINT, customer STRING );
テーブルの表示
データベース一覧から、表示したいデータベース名をクリックしてテーブル一覧を表示します。
テーブル一覧から、テーブル名をクリックしてフィールドを表示します。
テーブル詳細 タブをクリックして、基本情報、カラム一覧、およびパーティション一覧を表示します。
説明テーブル詳細 タブでは、パーティションあり/なしの両方のテーブルについて、ストレージクラスを手動で変更できます。詳細については、「ストレージクラスの手動変更」をご参照ください。
権限 タブをクリックして、ユーザーまたはロールにテーブルの権限を付与します。詳細については、「データ権限管理」をご参照ください。
テーブルの削除
テーブルを削除すると、デフォルトで 1 日間データを保持し、誤削除のリスクを低減します。1 日経過後にデータは完全に削除されます。
データベース一覧から、ご利用のデータベース名をクリックします。
テーブル一覧の [操作] 列から、削除 をクリックします。
確認ダイアログボックスで、OK をクリックして削除を完了します。