使冪等寫在工作
有時寫數據到三角洲的工作表重新啟動由於各種原因(例如,工作遇到失敗)。失敗的工作可能有也可能沒有書麵終止前三角洲表的數據。的情況下的數據寫入三角洲表,重新啟動工作將相同的數據寫入三角洲表導致重複數據。
為了解決這個問題,δ表支持以下DataFrameWriter
的選項,使得冪等寫道:
txnAppId
:一個獨一無二的字符串,您可以通過在每個DataFrame
寫。例如,這可以工作的名稱。txnVersion
:一個單調遞增數字作為事務的版本。這個數字需要獨特的數據寫入到三角洲表(s)。例如,這可以即時查詢時的時代秒第一次未遂。任何後續重新啟動相同的工作需要有相同的值txnVersion
。
上麵的選項需要獨特的組合為每個新數據被吸收到表和三角洲txnVersion
需要攝取高於去年數據到三角洲表中。例如:
最後成功地寫數據包含選項值
dailyETL: 23423
(txnAppId: txnVersion
)。接下來應該寫數據
txnAppId=dailyETL
和txnVersion
至少23424年
(一個超過最後寫數據txnVersion
)。任何試圖寫入數據
txnAppId=dailyETL
和txnVersion
作為23422年
將被忽略,因為txnVersion
不到最後一個記錄嗎txnVersion
在表中。試圖寫入數據
txnAppId: txnVersion
作為anotherETL: 23424
成功寫入數據表,因為它包含一個不同的嗎txnAppId
相比去年攝入數據相同的選項值。
警告
這個解決方案假設數據寫入三角洲表(s)在多個重試的工作是一樣的。如果試圖寫一個三角洲表成功但由於一些下遊失敗還有第二個嚐試時候選項相同,但是不同的數據寫上去的,那麼第二次寫嚐試將被忽略。這可能會導致意想不到的結果。
下麵的代碼給出了一個例子:
app_id=…#一個獨一無二的字符串用作應用程序ID。版本=…#一個單調遞增數字,充當事務的版本。dataFrame。寫。選項(“txnVersion”,版本)。選項(“txnAppId”,app_id)。保存(…)
瓦爾appId=…/ /一個獨一無二的字符串用作應用程序ID。版本=…/ /一個單調遞增數字,充當事務的版本。dataFrame。寫。選項(“txnVersion”,版本)。選項(“txnAppId”,appId)。保存(…)