Apache Paimon(Paimon)は、システムテーブルを使用して、各Paimonテーブルのメタデータとデータ消費情報を格納します。このトピックでは、さまざまなシステムテーブルの列について説明します。
テーブルメタデータに関連するシステムテーブル
スナップショットテーブル
スナップショットテーブルを使用すると、スナップショットファイルのIDや作成時刻など、Paimonテーブルの各スナップショットファイルに関する情報をクエリできます。
たとえば、次のSQLステートメントを使用して、mycatalog.mydb.mytbl Paimonテーブルのスナップショットテーブルをクエリできます。
SELECT * FROM mycatalog.mydb.`mytbl$snapshots`; // mycatalog.mydb.mytblテーブルのスナップショットテーブルをクエリします。次の表に、スナップショットテーブルの列を示します。
列 | データ型 | 説明 |
snapshot_id | Long | スナップショットファイルのID。 |
schema_id | Long | スナップショットファイルで使用されるスキーマファイルのID。スキーマテーブルからスキーマ情報を取得できます。 |
commit_time | Timestamp | スナップショットファイルが作成された時刻。 |
total_record_count | Long | スナップショットファイルが指すデータファイル内のレコードの総数。 説明 この列の値は、Paimonテーブルに論理的に格納されているデータレコードの数を示すものではありません。これは、データファイルがスナップショットファイルに取り込まれる前にメモリ内で圧縮されるためです。 |
delta_record_count | Long | 前のスナップショットファイルと比較して追加されたデータレコードの数。 |
changelog_record_count | Long | 前のスナップショットファイルと比較して生成された変更ログレコードの数。 |
スキーマテーブル
ALTER TABLE、CREATE TABLE AS、または CREATE DATABASE AS ステートメントを使用してPaimonテーブルのスキーマを変更すると、変更ごとにスキーマテーブルにレコードが生成されます。スキーマテーブルを使用すると、Paimonテーブルの現在および過去のスキーマ情報をクエリできます。たとえば、次の SQL ステートメントを使用して、mycatalog.mydb.mytbl Paimon テーブルのスキーマテーブルをクエリできます。
SELECT * FROM mycatalog.mydb.`mytbl$schemas`; // mycatalog.mydb.mytblテーブルのスキーマテーブルをクエリします。次の表に、スキーマテーブルの列を示します。
列 | データ型 | 説明 |
schema_id | Long | スキーマのID。 |
fields | String | 各列の名前とデータ型。 |
partition_keys | String | パーティションキーの名前。 |
primary_keys | String | プライマリキーの名前。 |
options | String | テーブルオプションの値。 |
comment | String | 追加情報を提供するためにテーブルに追加されたコメント。 |
update_time | Timestamp | スキーマが最後に変更された時刻。 |
オプションテーブル
オプションテーブルを使用すると、テーブルオプションの現在の構成をクエリできます。
たとえば、次のSQLステートメントを使用して、mycatalog.mydb.mytbl Paimonテーブルのオプションテーブルをクエリできます。
SELECT * FROM mycatalog.mydb.`mytbl$options`; // mycatalog.mydb.mytblテーブルのオプションテーブルをクエリします。次の表に、オプションテーブルの列を示します。
列 | データ型 | 説明 |
key | String | テーブルオプションの名前。 |
value | String | テーブルオプションの値。 |
テーブルオプションがテーブルに含まれていない場合、オプションはデフォルト値に設定されます。
パーティションテーブル
パーティションテーブルを使用すると、Paimonテーブルのパーティション、各パーティションのデータレコードの総数、および各パーティションのファイルの合計サイズをクエリできます。
たとえば、次のSQLステートメントを使用して、mycatalog.mydb.mytbl Paimonテーブルのパーティションテーブルをクエリできます。
SELECT * FROM mycatalog.mydb.`mytbl$partitions`; // mycatalog.mydb.mytblテーブルのパーティションテーブルをクエリします。次の表に、パーティションテーブルの列を示します。
列 | データ型 | 説明 |
partition | String |
|
record_count | Long | パーティション内のデータレコードの総数。 説明 この列の値は、パーティションに論理的に格納されているデータレコードの数を示すものではありません。これは、データファイルがスナップショットファイルに取り込まれる前にメモリ内で圧縮されるためです。 |
file_size_in_bytes | Long | パーティション内のファイルの合計サイズ。単位:バイト。 現在のスナップショットファイルが指すデータファイルのみがカウントされます。 |
ファイルテーブル
ファイルテーブルを使用すると、スナップショットファイルが指すすべてのデータファイル(ファイル形式、ファイル内のレコード数、ファイルサイズなど)をクエリできます。
たとえば、次の SQL ステートメントを使用して、mycatalog.mydb.mytbl Paimon テーブルの最新のスナップショット用に作成されたファイルテーブルをクエリできます。
SELECT * FROM mycatalog.mydb.`mytbl$files`; // mycatalog.mydb.mytblテーブルの最新のスナップショットのファイルテーブルをクエリします。mycatalog.mydb.mytbl Paimon テーブルの特定のスナップショット用に作成されたファイルテーブルをクエリすることもできます。次の SQL ステートメントを使用して、ID が 5 のスナップショット用に作成されたファイルテーブルをクエリできます。
SELECT * FROM mycatalog.mydb.`mytbl$files` /*+ OPTIONS('scan.snapshot-id'='5') */; // ID が 5 のスナップショットのファイルテーブルをクエリします。次の表に、ファイルテーブルの列を示します。
列 | データ型 | 説明 |
partition | String | ファイルを含むパーティション。形式: |
bucket | Integer | ファイルを含むバケット。この列は、固定バケットモードを使用するプライマリキテーブルにのみ適用されます。 |
file_path | String | ファイルのパス。 |
file_format | String | ファイルの形式。 |
schema_id | Long | スナップショットファイルが使用するスキーマファイルの ID。スキーマテーブルからスキーマ情報を取得できます。 |
level | Integer | ファイルのログ構造マージツリー(LSM)レベル。この列は、プライマリキーテーブルにのみ適用されます。 値 0 は小さなファイルを意味します。バケット内の小さなファイルの数をクエリして、バケット内の圧縮の進行状況を監視できます。 |
record_count | Long | ファイル内のレコード数。 |
file_size_in_bytes | Long | ファイルのサイズ。単位:バイト。 |
ファイルテーブルには、クエリ対象のスナップショットファイルが指していない履歴データファイルに関する情報は含まれていません。
タグテーブル
タグテーブルを使用すると、タグの名前やタグに関連付けられたスナップショットなど、Paimonテーブルのタグに関する情報をクエリできます。
たとえば、次のSQLステートメントを使用して、mycatalog.mydb.mytbl Paimonテーブルのタグテーブルをクエリできます。
SELECT * FROM mycatalog.mydb.`mytbl$tags`; // mycatalog.mydb.mytblテーブルのタグテーブルをクエリします。次の表に、タグテーブルの列を示します。
列 | データ型 | 説明 |
tag_name | String | タグの名前。 |
snapshot_id | Long | タグに関連付けられたスナップショットのID。 |
schema_id | Long | タグが使用するスキーマの ID。スキーマテーブルからスキーマ情報を取得できます。 |
commit_time | Timestamp | タグに関連付けられたスナップショットが作成された時刻。 |
record_count | Long | データファイル内のレコード数。 |
データ消費に関連するシステムテーブル
読み取り最適化テーブル
Paimon テーブルのデータファイルは、消費できるようになる前にメモリ内で圧縮する必要があり、これが読み取り効率に影響します。プライマリキーテーブルを使用していて、バッチ読み取りまたはアドホック OLAP クエリの効率を向上させたい場合は、対応する読み取り最適化テーブルからデータを消費できます。これにより、圧縮を必要としないファイルのみが読み取られるため、圧縮プロセスが不要になり、クエリ効率が向上します。小さなファイルは圧縮頻度が低いため、読み取り最適化テーブルではデータのレイテンシが増加することに注意してください。次のパラメーターを構成して、小さなファイルを定期的に圧縮し、書き込み効率、読み取り効率、およびデータレイテンシのバランスをとることができます。
パラメーター | 説明 | データ型 | デフォルト値 | 備考 |
compaction.optimization-interval | 小さなファイルが圧縮される間隔。 | Duration | なし | 小さなファイルを頻繁に圧縮すると、書き込み効率に影響する可能性があります。このパラメーターは |
たとえば、次の SQL ステートメントを使用して、mycatalog.mydb.mytbl Paimon テーブルの最新のスナップショット用に作成された読み取り最適化テーブルをクエリできます。
SELECT * FROM mycatalog.mydb.`mytbl$ro`; // mycatalog.mydb.mytblテーブルの最新のスナップショットの読み取り最適化テーブルをクエリします。監査ログテーブル
Paimon テーブルの各レコードの具体的な操作を知る必要がある場合は、対応する監査ログテーブルからデータを消費できます。元の Paimon テーブルと比較して、監査ログテーブルは各レコードの先頭に rowkind という名前の列を挿入して操作タイプを格納します。 rowkind 列の有効な値は、+I(挿入)、-U(更新前)、+U(更新後)、および -D(削除)です。監査ログテーブルの各レコードの操作タイプは +I(挿入)です。
たとえば、次の SQL ステートメントを使用して、mycatalog.mydb.mytbl Paimon テーブルの最新のスナップショット用に作成された監査ログテーブルをクエリできます。
SELECT * FROM mycatalog.mydb.`mytbl$audit_log`; // mycatalog.mydb.mytblテーブルの最新のスナップショットの監査ログテーブルをクエリします。参照
各システムテーブルの完全な構造については、Apache Paimon 公式ドキュメントをご参照ください。