我們使用DLT管道磚工作區由微軟Azure平台失敗的間歇性和不清楚原因。Beplay体育安卓版本
管道如下:
spark.readStream.format(“δ”)。選項(“mergeSchema”,“真正的”)。選項(“ignoreChanges”,“真正的”).load (topic_name)
dlt.create_streaming_live_table (…)
dlt.apply_changes (
目標= target_table_name,
源= f“序列({topic_name})”,
鍵=(“關鍵”),
sequence_by =坳(“序列”),
stored_as_scd_type = " 1 "
)
至此,管道工作或不工作,根據周的日子(月球階段),輸入數據是相同的!它可能工作幾天,然後發出一個錯誤:“
org.apache.spark.sql.streaming。StreamingQueryException:查詢MAIN_FLOW_MOVES [id = e8a4577a - 5 - d1a 4 - bfb 9801 - 8 f47c8534f05 runId = b9364adb-a8d1-4ccf-af30-f00ad5b66520]終止與例外:發現一個數據更新(例如部分- 00004 - 7397764 - 432 - 48 - a1 - - c - a104 - 03192 - f199def c000.snappy.parquet)在源表版本3。這是目前不支持。如果你想忽略更新,設置選項“ignoreChanges”到“真正的”。如果你想反映的數據更新,請重啟該查詢以全新的關卡目錄。
要求完成SCD 1型滿意:每個唯一鍵都有獨特的序列號和沒有出現衝突或不一致的可能性。我們已經檢查很多次。
正如我所說,相同的管道工作或不工作沒有任何變化和不穩定行為的原因還不清楚。就我而言,所有條件正確並持續完成SCD 1型攝入已經滿足。
請幫助我們理解這種不穩定行為的原因。這影響我們的能力去忍受這個應用程序。
好吧,所以在做一些調查的方式解決我最初的問題,我想我們得到一些清晰。
考慮下麵的數據幀所攝取的DLT流管道:
dfMock = spark.sparkContext.parallelize ([[1 0 2], [1, 1, 3]])。\
toDF (StructType ([StructField(“關鍵”,LongType(),假),StructField (seq, LongType(),假),StructField(“數據”,LongType(),假))))
攝入這第一次,使用DLT 1型更新,結果在成功運行。攝入這第二次失敗。
為什麼?
因為沒有檢查點相關的輸入數據。那一刻流管道停了下來,再次運行,似乎自然地處理文檔相同的數據和失敗,因為它認為它看到一個更新相同的鍵。
是DLT管道的設計者想什麼關於這個最初?我們想離開了。
現在,答案從磚在這一點上應該是這樣的:“當然,這是因為你誤解了如何使用流數據源數據處理工作。在流數據來源的檢查點照顧加工和未加工記錄。做作業”
我們做了家庭作業和評估流讀/流DLT管道。然而我們發現,即使在這種情況下,DLT管道失敗,因為它不承認在其停止和重新啟動它讀取標準輸入流的已經在前麵跑。這是問題的根源。
現在,自從我打破你的一些問題,你能幫助我了解如何正確使用DLT管道在重啟所以不休息嗎?是不應該撿起從輸入流的檢查點,它已經失敗(或停止)簡訊嗎?