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 一组操作度量。
下表按操作将映射键的定义列出。
WRITE、CREATE TABLE AS SELECT、REPLACE TABLE AS SELECT、COPY 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 |
要删除的文件数。 |