取消
顯示的結果
而不是尋找
你的意思是:

複製到生成δ表中重複的行

dataexplorer
新的貢獻者三世

大家好,

我想大部分從SQL server數據庫表加載到ADLS鋪文件,然後這些文件加載到三角洲表(生/銅)。我做了一個曆史/基本負荷但我後續增量加載(日期重疊與曆史負荷)產生重複。一些閱讀到目前為止我所做的是指出使用本機python代碼,如“為”循環不建議在磚——我可以解決這個附加的所有SQL語句合並在一起並執行單個語句,但想知道如果這是這樣,為什麼?謝謝你!

更新:我已經刪除了代碼for循環和嚐試執行的一個表,看來問題不是“為”循環。如果記錄在曆史負荷和再次發生在增量加載負載但行並沒有改變——仍然被加載到表作為一個重複的行。做增量加載文件需要互斥的不含任何重疊與先前的文件行嗎?

代碼如下:

火花。sql(“使用原料;”)文件= dbutils.fs.ls (landingZoneLocation) fi的文件:如果fi。isFile: delta_table_name = " crm_ " + fi.name.split (“。”) [0] .lower () deltaTableCopyIntoSQL = "複製到三角洲。dbfs: / mnt /生/“+ delta_table_name +”從“dbfs: / mnt /著陸/ crm /“+ processDate +”/“+ fi.name +”FILEFORMAT =拚花;“打印(deltaTableCopyIntoSQL) spark.sql (deltaTableCopyIntoSQL)

1接受解決方案

接受的解決方案

werners1
尊敬的貢獻者三世

@Umar阿尤布,你需要的是融入,而不是複製。

與合並你可以指定記錄插入、更新和刪除。

https://docs.microsoft.com/en-us/azure/databricks/spark/latest/spark-sql/language-manual/delta-merge..。

在原帖子查看解決方案

6個回答6

werners1
尊敬的貢獻者三世

@Umar阿尤布,你需要的是融入,而不是複製。

與合並你可以指定記錄插入、更新和刪除。

https://docs.microsoft.com/en-us/azure/databricks/spark/latest/spark-sql/language-manual/delta-merge..。

652852年
新的貢獻者三世

根據文檔,複製到不應該插入重複的記錄,它應該隻加載一個文件一次。警告似乎必須加載所有初始數據拷貝,而不是創建表和選擇一些初始批文件。我至少試圖更新現有的表與新鋪文件從S3存儲位置相同,第一個運行的複製到複製一切。

此外,並入似乎不支持從鋪文件合並,所以如果我想用,我可能需要創建一個臨時表中δ。歎息。

werners1
尊敬的貢獻者三世

複製本身不能插入重複,但這是一個附加操作。如果已經駐留在相同的數據表後你會重複複製。

合並是專門用來處理。

和它支持從鋪文件合並。幾乎我所有的合並有拚花源。

652852年
新的貢獻者三世

文件明確指出,“這是一個retriable和冪等operation-files已經加載的源位置是跳過。”What it doesn't say is that this file load history is apparently specific to the COPY INTO operation--so in practice loading even the very first batch of data with COPY INTO is necessary to have a complete loading history and avoid reloading on subsequent runs.

但我將愉快地使用合並,盡管我還沒有找到正確的語法來加載,鑲花的,你能分享示例代碼使用並入和拚花?

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map