排查Delta Table数据丢失问题:操作指标存在差异
Delta Table MERGE操作后数据丢失问题排查
我们的服务中发现Delta Table存在数据丢失问题:MERGE操作后表中总行数与输入数据不匹配。已通过统计Delta Table行数确认差异,同时在Delta Table事务历史的操作指标中也观察到异常,示例如下:
我为用于排查问题的关键指标标注了指向(A、B……)
{ "commitInfo": { "timestamp": 1695221622985, "operation": "MERGE", "operationParameters": { "predicate": "(((target.`PartitionId` IN ('2022', '2023')) AND (target.`PartitionId` = source.`PartitionId`)) AND (target.`Id` = source.`Id`))", "matchedPredicates": "[{\"predicate\":\"(source.`versionnumber` > target.`versionnumber`)\",\"actionType\":\"update\"}]", "notMatchedPredicates": "[{\"actionType\":\"insert\"}]", }, "readVersion": 1739, "isBlindAppend": false, "operationMetrics": { "numTargetRowsCopied": "12628748", (A) "numTargetRowsDeleted": "0", (B) "numTargetFilesAdded": "2", "executionTimeMs": "2031980", "numTargetRowsInserted": "10", (C) "scanTimeMs": "126629", "numTargetRowsUpdated": "92748", (D) "numOutputRows": "12677631", (E) "numSourceRows": "92758", (F) "numTargetFilesRemoved": "2", "rewriteTimeMs": "1904630" } } }
指标验证公式
根据日常观察,以下公式通常成立:
Eq1: A + C + D - B == E
Eq2: B + C + D == F
数据丢失时的异常表现:Eq2成立(输入数据已正确接收),但Eq1不成立(部分数据丢失)。本示例中Eq1的差值为43875行,即这些行未出现在Delta Table中。
疑问与求助
- 哪些情况下会出现此类差异?
- Delta Table 1.0栈是否存在已知问题导致该现象?
- 有哪些进一步排查的方向?
环境信息
- 操作工具:PySpark SDK
- 计算引擎:Synapse Spark池
- Apache Spark版本:3.1
- Delta Lake版本:1.0
内容的提问来源于stack exchange,提问作者Deepak Singhal
相关产品推荐
相关产品推荐

