system.iceberg_metadata_log
在 ClickHouse Cloud 中进行查询
该系统表中的数据保存在 ClickHouse Cloud 中每个节点的本地。因此,如需获得所有数据的完整视图,需要使用 clusterAllReplicas 函数。更多详情请参阅此处。
说明
system.iceberg_metadata_log 表会记录 ClickHouse 读取 Iceberg 表时的元数据访问和解析事件。它会提供每个已处理的元数据文件或条目的详细信息,这对于调试、审计以及了解 Iceberg 表结构的演变非常有用。
该表会记录从 Iceberg 表读取的每个元数据文件和条目,包括根元数据文件、manifest 列表和 manifest 条目。它有助于用户跟踪 ClickHouse 如何解读 Iceberg 表元数据,并诊断与 schema 变更、文件解析或查询计划相关的问题。
注意
该表主要用于调试。
控制日志详细级别
您可以使用 iceberg_metadata_log_level 设置来控制记录哪些元数据事件。
如需记录当前查询使用的所有元数据:
仅记录当前查询使用的根元数据 JSON 文件:
有关更多信息,请参阅 iceberg_metadata_log_level 设置的说明。
须知
- 仅当您需要详细排查 Iceberg 表时,才在查询级别使用
iceberg_metadata_log_level。否则,日志表可能会写入过多元数据,并导致性能下降。 - 该表包含重复条目,因为它主要用于调试,且不保证每个实体的唯一性。内容和剪枝状态分别存储在不同的行中,因为它们是在程序运行的不同时间点采集的。读取元数据时会采集内容,检查元数据以进行剪枝时会采集剪枝状态。切勿依赖该表本身进行去重。
- 如果使用比
ManifestListMetadata更详细的content_type,则会禁用 manifest 列表的 Iceberg 元数据缓存。 - 同样,如果使用比
ManifestFileMetadata更详细的content_type,则会禁用 manifest 文件的 Iceberg 元数据缓存。 - 如果 SELECT 查询被取消或失败,日志表中仍可能包含在取消或失败前已处理的元数据条目,但不会包含尚未处理的元数据实体信息。
列
| Name | Type | Description |
|---|---|---|
event_date | Date | 日志条目的日期。 |
event_time | DateTime | 事件的时间戳。 |
query_id | String | 触发元数据读取的查询 ID。 |
content_type | Enum8 | 元数据内容类型 (见下文) 。 |
table_path | String | Iceberg 表的路径。 |
file_path | String | 根元数据 JSON 文件、Avro manifest list 或 manifest 文件的路径。 |
content | String | JSON 格式的内容 (原始 .json 元数据、Avro 元数据或 Avro 条目) 。 |
row_in_file | Nullable(UInt64) | 文件中的行号 (如适用) 。仅在 ManifestListEntry 和 ManifestFileEntry 内容类型中出现。 |
pruning_status | Nullable(Enum8) | 条目的剪枝状态。'NotPruned'、'PartitionPruned'、'MinMaxIndexPruned'。请注意,分区剪枝会先于 minmax 剪枝执行,因此 'PartitionPruned' 表示该条目已被分区过滤器剪枝,且不会再尝试进行 minmax 剪枝。仅在 ManifestFileEntry 内容类型中出现。 |
content_type 取值
None:无内容。Metadata:根元数据文件。ManifestListMetadata:manifest 列表的元数据。ManifestListEntry:manifest 列表中的条目。ManifestFileMetadata:manifest 文件的元数据。ManifestFileEntry:manifest 文件中的条目。