Paimon系统表

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

分区值,格式为[分区值 1, 分区值 2, ...]

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

文件所在的分区,格式为[分区值 1, 分区值 2, ...]

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

如果小文件的全量合并过于频繁,可能导致写入作业效率偏低。因此推荐该参数值设置在30 min以上。

以下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 官方文档