表历史模式与操作度量

DESCRIBE HISTORY该命令返回14列,描述Apache Iceberg和Delta Lake表,描述表操作的历史。 使用该参考来解释每列。

关于检索表历史、查询早期表版本和恢复表的指导,请参见“ 处理表历史”。

历史模式

history 操作的输出包含下列列。

类型 Description
版本 long 由该操作生成的表版本。
时间戳 timestamp 提交此版本的时间。
userId string 运行操作的用户的 ID。
userName string 运行操作的用户的名称。
操作 string 操作的名称。
操作参数 map 操作的参数(例如谓词)。对于 OPTIMIZE 操作,这些参数标识操作的类型。 请参阅“标识操作类型OPTIMIZE”。
作业 struct 运行该操作的 Lakeflow 作业的详细信息。 仅对由 Lakeflow 作业写入的提交进行填充。 否则为 null
笔记本 struct 运行该操作所用的 Databricks 笔记本的详细信息。 仅对从 Databricks 笔记本中创建的提交填充此字段。 否则为 null
clusterId string 运行操作的群集的 ID。
读取版本 long 为执行写入操作而读取的表版本。
isolationLevel string 用于此操作的隔离级别。
isBlindAppend boolean 此操作是否追加数据。
operationMetrics map 操作的指标(例如修改的行数和文件数)。
userMetadata string 用户定义的提交元数据(如果已指定)。
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+
|version|          timestamp|userId|userName|operation| operationParameters| job|notebook|clusterId|readVersion|   isolationLevel|isBlindAppend|    operationMetrics|
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+
|      5|2019-07-29 14:07:47|   ###|     ###|   DELETE|[predicate -> ["(...|null|     ###|      ###|          4|WriteSerializable|        false|[numTotalRows -> ...|
|      4|2019-07-29 14:07:41|   ###|     ###|   UPDATE|[predicate -> (id...|null|     ###|      ###|          3|WriteSerializable|        false|[numTotalRows -> ...|
|      3|2019-07-29 14:07:29|   ###|     ###|   DELETE|[predicate -> ["(...|null|     ###|      ###|          2|WriteSerializable|        false|[numTotalRows -> ...|
|      2|2019-07-29 14:06:56|   ###|     ###|   UPDATE|[predicate -> (id...|null|     ###|      ###|          1|WriteSerializable|        false|[numTotalRows -> ...|
|      1|2019-07-29 14:04:31|   ###|     ###|   DELETE|[predicate -> ["(...|null|     ###|      ###|          0|WriteSerializable|        false|[numTotalRows -> ...|
|      0|2019-07-29 14:01:40|   ###|     ###|    WRITE|[mode -> ErrorIfE...|null|     ###|      ###|       null|WriteSerializable|         true|[numFiles -> 2, n...|
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+

注释

了解 partitionBy 在操作参数中的应用

partitionBy表历史记录中的字段仅对定义或更改表分区架构的 CREATE 和 OVERWRITE 操作有意义。

对于现有表(APPEND、INSERT、UPDATE、DELETE、MERGE)的追加作,此字段可能会显示空数组 [] 或分区列,具体取决于所使用的写入方法(.save() vs .saveAsTable())。

此不一致是预期行为,不会影响将数据写入分区的方式。 不应使用它来验证追加操作。

Example

考虑一个按 date 列分区的表。 创建表时, partitionBy 将填充:

df.write.format("delta") \
  .partitionBy("date") \
  .saveAsTable("sales_data")

历史记录中显示的 CREATE操作为:

operationParameters: {
  "mode": "ErrorIfExists",
  "partitionBy": "[\"date\"]"
}

将数据追加到此表时, partitionBy 会显示一个空数组:

new_df.write.format("delta") \
  .mode("append") \
  .saveAsTable("sales_data")

APPEND操作显示:

operationParameters: {
  "mode": "Append",
  "partitionBy": "[]"
}

partitionBy 的空值是预期的。 数据仍会根据表的现有分区架构写入正确的分区。 请注意,路径 .save() 可能会在此字段中显示分区列,但此差异是实现详细信息,不会影响写入行为。

操作指标

history 操作返回列映射中的 operationMetrics 一组操作度量。

下表按操作将映射键的定义列出。

WRITECREATE TABLE AS SELECTREPLACE TABLE AS SELECTCOPY INTO

以下指标可用于这些操作:

指标名称 Description
numFiles 写入的文件数。
numOutputBytes 写入内容的大小(以字节为单位)。
numOutputRows 写入的行数。

STREAMING UPDATE

以下指标可用于此操作:

指标名称 Description
numAddedFiles 添加的文件数。
numRemovedFiles 已删除的文件数。
numOutputRows 写入的行数。
numOutputBytes 写入的大小(字节单位)。

DELETE

以下指标可用于此操作:

指标名称 Description
numAddedFiles 添加的文件数。 在删除表的分区时未提供。
numRemovedFiles 已删除的文件数。
numDeletedRows 删除的行数。 在删除表的分区时未提供。
numCopiedRows 在删除文件时复制的行数。
executionTimeMs 执行整个操作所需的时间。
scanTimeMs 扫描文件以查找匹配项所需的时间。
rewriteTimeMs 重写匹配文件所需的时间。

TRUNCATE

以下指标可用于此操作:

指标名称 Description
numRemovedFiles 已删除的文件数。
executionTimeMs 执行整个操作所需的时间。

MERGE

以下指标可用于此操作:

指标名称 Description
numSourceRows 源数据帧中的行数。
numTargetRowsInserted 插入到目标表中的行数。
numTargetRowsUpdated 目标表中更新的行数。
numTargetRowsDeleted 目标表中删除的行数。
numTargetRowsCopied 复制的目标行数。
numOutputRows 已写入的总行数。
numTargetFilesAdded 添加到接收器(目标)中的文件数量。
numTargetFilesRemoved 从接收器中删除的文件数(目标)。
executionTimeMs 执行整个操作所需的时间。
scanTimeMs 扫描文件以查找匹配项所需的时间。
rewriteTimeMs 重写匹配文件所需的时间。

UPDATE

以下指标可用于此操作:

指标名称 Description
numAddedFiles 添加的文件数。
numRemovedFiles 已删除的文件数。
numUpdatedRows 更新的行数。
numCopiedRows 在更新文件时刚刚复制的行数。
executionTimeMs 执行整个操作所需的时间。
scanTimeMs 扫描文件以查找匹配项所需的时间。
rewriteTimeMs 重写匹配文件所需的时间。

FSCK

以下指标可用于此操作:

指标名称 Description
numRemovedFiles 已删除的文件数。

CONVERT

以下指标可用于此操作:

指标名称 Description
numConvertedFiles 已转换的 Parquet 文件数。

OPTIMIZE

以下指标可用于此操作:

指标名称 Description
numAddedFiles 添加的文件数。
numRemovedFiles 已优化的文件数。
numAddedBytes 优化表后添加的字节数。
numRemovedBytes 删除的字节数。
minFileSize 优化表后最小文件的大小。
p25FileSize 优化表后第 25 百分位文件的大小。
p50FileSize 表优化后的文件大小中位数。
p75FileSize 表优化后的第 75 百分位文件大小。
maxFileSize 表优化后的最大文件大小。

CLONE

以下指标可用于此操作:

指标名称 Description
sourceTableSize 克隆版本的源表的大小(以字节为单位)。
sourceNumOfFiles 克隆版本的源表中的文件数。
numRemovedFiles 如果替换了先前的表,则从目标表中删除的文件数量。
removedFilesSize 如果替换了上一个表,则从目标表中删除的文件的总大小(以字节为单位)。
numCopiedFiles 复制到新位置的文件数。 如果是浅表克隆,则为 0。
copiedFilesSize 复制到新位置的文件的总大小(以字节为单位)。 如果是浅表克隆,则为 0。

RESTORE

以下指标可用于此操作:

指标名称 Description
tableSizeAfterRestore 还原后的表大小(以字节为单位)。
numOfFilesAfterRestore 还原后表中的文件数。
numRemovedFiles 还原操作删除的文件数。
numRestoredFiles 由于还原而添加的文件数。
removedFilesSize 还原删除的文件的大小(以字节为单位)。
restoredFilesSize 还原添加的文件的大小(以字节为单位)。

VACUUM

以下指标可用于此操作:

指标名称 Description
numDeletedFiles 已删除的文件数。
numVacuumedDirectories 已清理的目录数量。
numFilesToDelete 要删除的文件数。