我有一張表,每天通過合并來攝取新資料。我目前正在嘗試從檔案格式遷移,ORC并且Delta在處理以下簡單Merge操作時偶然發現了一個問題:
DeltaTable
.forPath(sparkSession, deltaTablePath)
.alias(SOURCE)
.merge(
rawDf.alias(RAW),
joinClause // using primary keys and when possible partition keys. Not important here I guess
)
.whenNotMatched().insertAll()
.whenMatched(dedupConditionUpdate).updateAll()
.whenMatched(dedupConditionDelete).delete()
.execute()
合并完成后,每個受影響的磁區都有數百個新檔案。由于每天有一個新的攝取,這種行為會使后續的每個合并操作越來越慢。
版本:
- 火花:2.4
- 三角湖:0.6.1
有沒有辦法在保存之前重新磁區?或任何其他方式來改善這一點?
uj5u.com熱心網友回復:
您應該delta.autoOptimize.autoCompact在表上設定屬性以進行自動壓縮。
以下頁面顯示了如何為現有表和新表設定。
https://docs.databricks.com/delta/optimizations/auto-optimize.html
uj5u.com熱心網友回復:
在 Delta core 的代碼中搜索了一下后,有一個選項可以在 write 時重新磁區:
spark.conf.set("spark.databricks.delta.merge.repartitionBeforeWrite.enabled", "true")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/494577.html
上一篇:通過比較舊列的值來創建新列
