JDBC寫失敗,出現primarykeybreach錯誤

JDBC寫入SQL數據庫失敗,出現' primarykeybreach '錯誤或導致數據重複

寫的harikrishnan.kunhumveettil

最後發布時間:2022年5月24日

問題

您正在使用JDBC寫入具有主鍵約束的SQL表,作業失敗PrimaryKeyViolation錯誤。

或者,您正在使用JDBC寫入一個沒有主鍵約束的SQL表,並且在最近寫入的表中看到重複的條目。

導致

當Apache Spark執行JDBC寫操作時,DataFrame的一個分區被寫入SQL表。這通常作為單個JDBC事務來完成,以避免重複插入數據。但是,如果事務在提交之後失敗,但在最後階段完成之前,則可能會將重複的數據複製到SQL表中。

PrimaryKeyViolation當寫操作試圖為主鍵插入重複項時,會發生錯誤。

解決方案

您應該使用一個臨時表來緩衝寫操作,並確保沒有重複數據。

  1. 驗證在您的Spark配置中禁用投機執行:火花。錯誤的猜測.默認情況下是禁用的。
  2. 在SQL數據庫上創建一個臨時表。
  3. 修改Spark代碼以寫入臨時表。
  4. 在完成Spark寫操作後,檢查臨時表,確保沒有重複的數據。
  5. 將臨時表與SQL數據庫上的目標表合並。
  6. 刪除臨時表。
刪除

信息

這種解決方法隻應該在遇到列出的數據複製問題時使用,因為與直接寫入目標表的Spark作業相比,它的性能損失很小。