Я использую дельту (OSS - версия 0.7.0 с pyspark 3.0.1), и таблица модифицируется (объединяется) каждые 5 минут - сценарий microbatch pyspark.
Когда я запускаю в первый раз, он создал 18 небольших файлов (numTargetRowsInserted -> 32560), и я использовал те же данные и перезапустил снова, хотя в данных нет изменений, таблица затронута, версия обновлена и количество маленьких файлов увеличилось до 400, а ранее добавленные 18 файлов были помечены как удаленные. Однако, за исключением первого MERGE, последующее слияние имеет следующие значения numTargetRowsCopied -> 32560 в OperationMetics. Почему целевые строки копируются снова, а старые файлы помечаются как удаленные? Я что-то упустил?
Данные OperationMetrics приведены ниже.
OperationMetrics |
[NumTargetRowsCopied -›32560, NumTargetRowsDeleted -› 0, NumTargetFilesDadd -›18, executionTimems -› 0, NumTargetRowsInserted -›0, ScantImems -› 320-, numTargetRowsUpdated -›0, NumOutputRows -› 3260 -ilrowsupdatupd , переписатьTimeMs -> 66410]|
[NumTargetRowsCopied -›32560, NumTargetRowsDeleted -› 0, NumTargetFilesDadd -›400, executionTimems -› 0, NumTargetRowsInserted -›0, ScantiMems -› 320-, numTargetRowsUpdated -›0, NumOutputrows -› 320 -illowsupdupd , переписатьTimeMs -> 48810]|
[NumTargetRowsCopied -›32560, NumTargetRowsDeleted -› 0, NumTargetFilesDadd -›18, executionTimems -› 0, NumTargetRowsInserted -›0, ScantiMems -› 3256-, numTargesUpdated -›0, numOutputRows -› 320 -illowsupdated -›0, numbrowsupad , переписатьTimeMs -> 15039] |
[NumTargetRowsCopied -›32560, numTargetRowsDeleted -› 0, NumTargetFilesDadd -›18, executionTimems -› 0, NumTargetRowsInserted -›0, Scantimems -› 3244, numTargetRowSupDated -›0, NumOutputRows -› 320 -ilourowsupdated -›0, numbrowsupad , переписатьTimeMs -> 14828] |
[NumTargetRowsCopied -›32560, NumTargetRowsDeleted -› 0, NumTargetFilesDadd -›18, executionTimems -› 0, NumTargetRowsInserted -›0, ScantImems -› 320-, numTargetRowsUpdated -›0, NumOutputRows -› 3260 -ilourowsupd , переписатьTimeMs -> 70194]|
[NumTargetRowsCopied -›32560, NumTargetRowsDeleted -› 0, NumTargetFilesDadd -›400, executionTimems -› 0, NumTargetRowsInserted -›0, ScantiMems -› 320-, numTargetRowsUpdated -›0, NumOutputRows -› 320 -illowsupdupd , переписатьTimeMs -> 80719]|
[NumTargetRowsCopied -›0, NumTargetRowsDeleted -› 0, NumTargetFilesAdded -›18, executionTimemes -› 0, NumTargetRowsInserted -›32560, Scantimems -› 7035, NumTargetRowSupDated -›0, NumOutputRows -› 320 -ilourowsUpdated -›0, numpulowsupdated -› 0, numbrowsupad , переписатьTimeMs -> 11606] |
Объединить SQL:
MERGE INTO Target_table tgt
USING Source_table src
ON src.pk_col = tgt.pk_col
WHEN MATCHED AND src.operation=="DELETE" THEN DELETE
WHEN MATCHED AND src.operation=="UPDATE" THEN UPDATE SET *
WHEN NOT MATCHED AND src.operation!="DELETE" THEN INSERT *