
# 查询系统表
#### 前提条件
在Spark中使用Iceberg前，需先配置Spark目录，spark_catalog和prod目录配置请参见[Iceberg Catalog配置](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_300918.html#mrs_01_300918)。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 '2026-06-30 08:00:00';
    ```
    
  
  - 示例二：
    ```
    SELECT * FROM prod.db.table.partitions VERSION AS OF 10963874102873;
    ```
    
   
 
