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 查询被取消或失败,日志表中仍可能包含在取消或失败前已处理的元数据条目,但不会包含尚未处理的元数据实体信息。
列
hostname(LowCardinality(String)) — 执行该查询的服务器主机名。event_date(Date) — 条目的日期。event_time(DateTime) — 事件时间。query_id(String) — 查询 ID。content_type(Enum8('None' = 0, 'Metadata' = 1, 'ManifestListMetadata' = 2, 'ManifestListEntry' = 3, 'ManifestFileMetadata' = 4, 'ManifestFileEntry' = 5)) — 内容类型。table_path(String) — 表路径。file_path(String) — 文件路径。content(String) — JSON 格式的内容 (JSON 文件内容、Avro 元数据或 Avro 条目) 。row_in_file(Nullable(UInt64)) — 文件中的行。pruning_status(Nullable(Enum8('NotPruned' = 0, 'PartitionPruned' = 1, 'MinMaxIndexPruned' = 2))) — 该文件的分区剪枝或最小-最大索引剪枝状态。
content_type 取值
None:无内容。Metadata:根元数据文件。ManifestListMetadata:manifest 列表的元数据。ManifestListEntry:manifest 列表中的条目。ManifestFileMetadata:manifest 文件的元数据。ManifestFileEntry:manifest 文件中的条目。