更新时间:2026-06-11 GMT+08:00
分享

查询系统表

前提条件

在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表将不包含partitionspec_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;

相关文档