Paimon系統資料表用於儲存Paimon表的中繼資料和特定的資料消費行為。本文為您介紹Paimon中繼資料系統資料表和特定消費行為的有關係統表作用,相關的欄位及含義等。
中繼資料系統資料表
Snapshots系統資料表
Snapshots系統資料表可以查詢每個快照檔案的具體資訊,例如快照檔案的編號,快照檔案的建立時間等。
以下SQL語句查詢mycat.mydb.mytbl
的Snapshots系統資料表。
SELECT * FROM mycat.mydb.`mytbl$snapshots`;
Snapshots系統資料表常用的列如下。
列名 | 資料類型 | 含義 |
snapshot_id | Long | 快照檔案的編號。 |
schema_id | Long | 快照檔案對應的表結構檔案編號,表結構檔案的內容可在Schemas系統資料表中查看。 |
commit_time | Timestamp | 快照檔案的建立時間。 |
total_record_count | Long | 快照檔案指向的資料檔案中資料的總條數。 說明 資料檔案需要在記憶體中歸併之後才能產出真正的資料。因此total_record_count列的取值並不等於Paimon表邏輯上儲存的資料條數。 |
delta_record_count | Long | 與上一個快照檔案相比,資料檔案中增加的資料條數。 |
changelog_record_count | Long | 本次快照產出的變更資料條數。 |
Schemas系統資料表
Schemas系統資料表可以查詢表的當前以及歷史結構資訊。每次通過ALTER TABLE語句或CREATE TABLE AS(CTAS)語句或CREATE DATABASE AS(CDAS)語句修改Paimon表的結構時,都會在Schemas系統資料表中增加一條記錄。以下SQL語句查詢mycat.mydb.mytbl
的Schemas系統資料表。
SELECT * FROM mycat.mydb.`mytbl$schemas`;
Schemas系統資料表常用的列如下。
列名 | 資料類型 | 含義 |
schema_id | Long | 表結構的編號。 |
fields | String | 每一列的名稱以及類型等。 |
partition_keys | String | 分區列的名稱。 |
primary_keys | String | 主鍵的名稱。 |
options | String | 表參數的值。 |
comment | String | 表的備忘資訊。 |
update_time | Timestamp | 表結構修改的時間。 |
Options系統資料表
Options系統資料表可以查詢當前配置的表參數。
以下SQL語句查詢mycat.mydb.mytbl
的Options系統資料表。
SELECT * FROM mycat.mydb.`mytbl$options`;
Options系統資料表常用的列如下。
列名 | 資料類型 | 含義 |
key | String | 配置項的名稱。 |
value | String | 配置項的值。 |
未顯示的表參數將使用預設值。
Partitions系統資料表
Partitions系統資料表可以查詢Paimon表裡有哪些分區、每個分區的資料總數,以及檔案總量。
以下SQL語句查詢mycat.mydb.mytbl
對應的Partitions系統資料表。
SELECT * FROM mycat.mydb.`mytbl$partitions`;
Partitions系統資料表常用的列如下。
列名 | 資料類型 | 含義 |
partition | String | 分區值,格式為 |
record_count | Long | 分區內的資料條數。 說明 資料檔案還需要在記憶體中歸併之後才能產出真正的資料,因此record_count列的取值並不等於該分區邏輯上儲存的資料條數。 |
file_size_in_bytes | Long | 分區內的檔案總大小,以位元組為單位。 未被當前快照檔案指向的歷史資料檔案不會被統計。 |
Files系統資料表
Files系統資料表可以查詢某個快照檔案指向的所有資料檔案,包括資料檔案的格式、檔案內的資料條數和檔案大小等。
以下SQL語句查詢mycat.mydb.mytbl
最新快照對應的Files系統資料表。
SELECT * FROM mycat.mydb.`mytbl$files`;
以下SQL語句查詢mycat.mydb.mytbl
編號為5的快照對應的Files系統資料表。
SELECT * FROM mycat.mydb.`mytbl$files` /*+ OPTIONS('scan.snapshot-id'='5') */;
Files系統資料表常用的列如下。
列名 | 資料類型 | 含義 |
partition | String | 檔案所在的分區,格式為 |
bucket | Integer | 檔案所在的分桶,只對固定分桶的主鍵表有意義。 |
file_path | String | 檔案路徑。 |
file_format | String | 檔案格式。 |
schema_id | Long | 快照檔案對應的表結構檔案編號,表結構檔案的內容可在Schemas系統資料表中查看。 |
level | Integer | 檔案所在的LSM層級,只對主鍵表有意義。 level = 0的檔案就是未合并的小檔案。通過查詢某個分桶level = 0的檔案數量,可以瞭解該分桶小檔案合并的情況。 |
record_count | Long | 檔案內的資料條數。 |
file_size_in_bytes | Long | 檔案大小,以位元組為單位。 |
未被當前快照檔案指向的歷史資料檔案不會顯示在查詢結果裡。
Tags系統資料表
Tags系統資料表可以查詢每個Tag檔案的具體資訊,例如Tag的名稱、建立Tag時使用的快照編號等。
以下SQL語句查詢mycat.mydb.mytbl
的Tags系統資料表。
SELECT * FROM mycat.mydb.`mytbl$tags`;
Snapshots系統資料表常用的列如下。
列名 | 資料類型 | 含義 |
tag_name | String | Tag名稱。 |
snapshot_id | Long | 建立Tag時基於的快照的編號。 |
schema_id | Long | Tag對應的表結構編號,可在Schemas系統資料表中查詢編號對應的具體表結構。 |
commit_time | Timestamp | 建立Tag時基於的快照的建立時間。 |
record_count | Long | 檔案內的資料條數。 |
特定消費行為的系統資料表
Read-optimized系統資料表
通常,Paimon表在消費過程中,需要將資料檔案在記憶體中歸併之後,才能產出真正的資料,一定程度上會影響查詢效率。如果您對Paimon主鍵表的批作業讀取效率,或即席(OLAP)查詢效率有較高的要求,可以消費該Paimon表對應的Read-optimized系統資料表。Read-optimized系統資料表唯讀取不需要合并的檔案(主要是小檔案全量合并後的資料檔案),因此省去了在記憶體中歸併排序的流程,提高了查詢效率。然而,小檔案的全量合并頻率較低,因此read-optimized系統資料表產出的資料時效性偏低。您可以配置以下參數,使得小檔案全量合并在一段時間後強制進行,在寫入效率、消費效率與資料時效性之間進行平衡。
參數 | 說明 | 資料類型 | 預設值 | 備忘 |
compaction.optimization-interval | 超過該時間間隔後,強制進行小檔案的全量合并。 | Duration | 無 | 如果小檔案的全量合并過於頻繁,可能導致寫入作業效率偏低。因此推薦該參數值設定在 |
以下SQL語句查詢mycat.mydb.mytbl
最新快照對應的Read-optimized系統資料表。
SELECT * FROM mycat.mydb.`mytbl$ro`;
Audit Log系統資料表
如果您在消費Paimon表的過程中,需要瞭解每一條資料的操作類型是插入還是刪除,可以消費該Paimon表對應的Audit Log系統資料表。Audit log系統資料表產出的資料與對應的Paimon表一致,只是會在每條資料第1列的前面新增一個rowkind列,顯式儲存這條資料的類型,資料的操作類型共有+I(insert)、-U(update before)、+U(update after)、-D(delete)四種。而對於Audit Log系統資料表裡的每條資料而言,它的資料操作類型都是+I(insert)
以下SQL語句查詢mycat.mydb.mytbl
最新快照對應的audit_log系統資料表。
SELECT * FROM mycat.mydb.`mytbl$audit_log`;
相關文檔
關於每種系統資料表完整的表結構詳情,請參見Apache Paimon 官方文檔。