Paimon系統表用于存儲Paimon表的元數據和特定的數據消費行為。本文為您介紹Paimon元數據系統表和特定消費行為的有關系統表作用,相關的字段及含義等。
元數據系統表
Snapshots系統表
Snapshots系統表可以查詢每個快照文件的具體信息,例如快照文件的編號,快照文件的創建時間等。
以下SQL語句查詢mycatalog.mydb.mytbl
的Snapshots系統表。
SELECT * FROM mycatalog.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語句查詢mycatalog.mydb.mytbl
的Schemas系統表。
SELECT * FROM mycatalog.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語句查詢mycatalog.mydb.mytbl
的Options系統表。
SELECT * FROM mycatalog.mydb.`mytbl$options`;
Options系統表常用的列如下。
列名 | 數據類型 | 含義 |
key | String | 配置項的名稱。 |
value | String | 配置項的值。 |
未顯示的表參數將使用默認值。
Partitions系統表
Partitions系統表可以查詢Paimon表里有哪些分區、每個分區的數據總數,以及文件總量。
以下SQL語句查詢mycatalog.mydb.mytbl
對應的Partitions系統表。
SELECT * FROM mycatalog.mydb.`mytbl$partitions`;
Partitions系統表常用的列如下。
列名 | 數據類型 | 含義 |
partition | String | 分區值,格式為 |
record_count | Long | 分區內的數據條數。 說明 數據文件還需要在內存中歸并之后才能產出真正的數據,因此record_count列的取值并不等于該分區邏輯上保存的數據條數。 |
file_size_in_bytes | Long | 分區內的文件總大小,以字節為單位。 未被當前快照文件指向的歷史數據文件不會被統計。 |
Files系統表
Files系統表可以查詢某個快照文件指向的所有數據文件,包括數據文件的格式、文件內的數據條數和文件大小等。
以下SQL語句查詢mycatalog.mydb.mytbl
最新快照對應的Files系統表。
SELECT * FROM mycatalog.mydb.`mytbl$files`;
以下SQL語句查詢mycatalog.mydb.mytbl
編號為5的快照對應的Files系統表。
SELECT * FROM mycatalog.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語句查詢mycatalog.mydb.mytbl
的Tags系統表。
SELECT * FROM mycatalog.mydb.`mytbl$tags`;
Tags系統表常用的列如下。
列名 | 數據類型 | 含義 |
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語句查詢mycatalog.mydb.mytbl
最新快照對應的Read-optimized系統表。
SELECT * FROM mycatalog.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語句查詢mycatalog.mydb.mytbl
最新快照對應的audit_log系統表。
SELECT * FROM mycatalog.mydb.`mytbl$audit_log`;
相關文檔
關于每種系統表完整的表結構詳情,請參見Apache Paimon 官方文檔。