简介
paimon系统表按照元数据的分类,划分了如下10个系统表,通过系统表可以获取paimon表各维度的元数据和消费组信息。通过收集这些元信息,不仅可以排查问题使用,还可以构建统一的paimon元数据管理和消费组管理平台,比如paimon-web就是通过查询系统表来实现表的元数据管理和展示的,本文将详细介绍各系统表的含义和用途。
1.快照表
通过快照表可以查询该表的快照历史信息,包括快照中发生的记录计数
SELECT * FROM my_catalog.my_db.`MyTable$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 | 本次快照产出的变更数据条数。 |
2.表模式
可以通过schemas表查询该表的历史模式。
SELECT * FROM wstest2$schemas;
可以连接快照表和模式表以获得给定快照的字段。
SELECT s.snapshot_id, t.schema_id, t.fields
FROM wstest2$snapshots s JOIN
MyTable$schemas t
ON s.schema_id=t.schema_id where s.snapshot_id=1;
schemas系统表常用的列如下:
列名 | 数据类型 | 含义 |
schema_id | Long | 表结构的编号。 |
fields | String | 每一列的名称以及类型等。 |
partition_keys | String | 分区列的名称。 |
primary_keys | String | 主键的名称。 |
options | String | 表参数的值。 |
comment | String | 表的备注信息。 |
update_time | Timestamp | 表结构修改的时间。 |
3.表选项
可以查询表的选项信息,这些信息是通过选项表从DDL指定的。未显示的选项将是默认值。可以参考[Configuration]。
SELECT * FROM wstest2$options;
Options系统表常用的列如下:
列名 | 数据类型 | 含义 |
key | String | 配置项的名称。 |
value | String | 配置项的值。 |
4.审计日志表
如果您在消费Paimon表的过程中,需要了解每一条数据的操作类型是插入还是删除,可以消费该Paimon表对应的Audit Log系统表。Audit log系统表产出的数据与对应的Paimon表一致,只是会在每条数据第1列的前面新增一个rowkind列,显式保存这条数据的类型,数据的操作类型共有+I(insert)、-U(update before)、+U(update after)、-D(delete)四种。而对于Audit Log系统表里的每条数据而言,它的数据操作类型都是+I(insert)
SELECT * FROM wstest2$audit_log;
5.表文件
可以查询指定快照表的文件。
-- 查询最新快照的文件SELECT * FROM wstest2$files;
-- 还可以查询指定快照的文件
SELECT * FROM wstest2$files /*+ OPTIONS('scan.snapshot-id'='1') */;
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 | 文件大小,以字节为单位。 |
6.表标签
通过标签表可以查询该表的标签历史信息,包括标签基于哪些快照,以及快照的一些历史信息。还可以获得所有标签名称和时间旅行到特定的标签数据名称。
SELECT * FROM wstest2$tags;
列名 | 数据类型 | 含义 |
tag_name | String | Tag名称。 |
snapshot_id | Long | 创建Tag时基于的快照的编号。 |
schema_id | Long | Tag对应的表结构编号,可在Schemas系统表中查询编号对应的具体表结构。 |
commit_time | Timestamp | 创建Tag时基于的快照的创建时间。 |
record_count | Long | 文件内的数据条数。 |
7.表消费者
可以查询当前paimon表包含下一个快照的所有消费者。
SELECT * FROM wstest2$consumers;
8.表清单文件表
可以查询当前表的最新快照或指定快照中包含的所有清单文件。
-- 查询最新快照的清单信息
SELECT * FROM wstest2$manifests;
-- 也可以查询带有指定快照的清单
SELECT * FROM wstest2$manifests /*+ OPTIONS('scan.snapshot-id'='1') */;
9.分区表
可以查询表的分区文件。
SELECT * FROM demo_p1$partitions;
Partitions系统表常用的列如下。
列名 | 数据类型 | 含义 |
partition | String | 分区值,格式为 |
record_count | Long | 分区内的数据条数。 说明 数据文件还需要在内存中归并之后才能产出真正的数据,因此record_count列的取值并不等于该分区逻辑上保存的数据条数。 |
file_size_in_bytes | Long | 分区内的文件总大小,以字节为单位。 未被当前快照文件指向的历史数据文件不会被统计。 |
10.全局系统表
全局系统表包含当前存在的所有表的统计信息;为了方便检索,创建了一个参考系统数据库sys,可以用sql在flink中显示所有全局系统表:
所有选项表,这个表类似于Options table,但是它显示所有的表选项都是all database。
SELECT * FROM sys.all_table_options;