查询系统表
前提条件
在Spark中使用Iceberg前,需先配置Spark目录,spark_catalog和prod目录配置请参见Iceberg Catalog配置。Iceberg基于Apache Spark的DataSourceV2 API实现数据源和目录功能。
基本语法
如果需要查看表的历史记录、快照及其他元数据,Iceberg支持通过查询系统表实现。
系统表的标识方式为在原表名后拼接系统表名称。例如,如果需要读取db.table表的历史记录,可通过db.table.history访问。注意需要使用三级或二级命名空间,即“prod.db.table.history”或“db.table.history”,不支持使用一级命名空间,即“table.history”。
- 历史记录
SELECT * FROM prod.db.table.history;
- 元数据日志条目
SELECT * from prod.db.table.metadata_log_entries;
- 快照
SELECT * FROM prod.db.table.snapshots;
- 条目
如果需要查看表当前所有清单文件中数据文件和删除文件的条目,可通过以下语句查询:
SELECT * FROM prod.db.table.entries;
- 文件
SELECT * FROM prod.db.table.files;
- 清单文件
SELECT * FROM prod.db.table.manifests;
查询结果中的“partition_summaries”列中的字段对应清单列表中的field_summary结构体,按以下顺序排列:
- contains_null
- contains_nan
- lower_bound
- upper_bound
“contains_nan”可能返回“null”,表示该信息在文件元数据中不可用,这通常发生在读取V1版本的表(V1版本不填充contains_nan信息)。
- 分区
SELECT * FROM prod.db.table.partitions;
对于未分区表,partitions表将不包含partition和spec_id字段。
partitions元数据表展示的是当前快照中包含数据文件或删除文件的分区。但需注意,删除文件并未实际应用,因此在某些情况下,即使分区的所有数据行都被删除文件标记为删除,该分区仍可能会被显示。
- 位置删除文件
如果需要查看表当前快照中所有的位置删除文件,可通过以下语句查询:
SELECT * from prod.db.table.position_deletes;
- 所有数据文件
如果需要查看表的所有数据文件及其各自的元数据,可通过以下语句查询:
SELECT * FROM prod.db.table.all_data_files;
- 所有删除文件
如果需要查看表在所有快照中的删除文件及其各自的元数据,可通过以下语句查询:
SELECT * FROM prod.db.table.all_delete_files;
- 所有条目
如果需要查看表在所有快照中数据文件和删除文件的清单条目,可通过以下语句查询:
SELECT * FROM prod.db.table.all_entries;
- 所有清单文件
SELECT * FROM prod.db.table.all_manifests;
查询结果中“partition_summaries”列中的字段对应清单列表中的field_summary结构体,按以下顺序排列:
- contains_null
- contains_nan
- lower_bound
- upper_bound
“contains_nan”可能返回“null”,表示该信息在文件元数据中不可用,通常发生在读取V1版本的表(V1版本不填充contains_nan信息)。
- 引用
SELECT * FROM prod.db.table.refs;
- 元数据表的时间旅行
- 示例一:
SELECT * FROM prod.db.table.manifests TIMESTAMP AS OF '2021-09-20 08:00:00';
- 示例二:
SELECT * FROM prod.db.table.partitions VERSION AS OF 10963874102873;
- 示例一: