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

SQL Update加入

MikeK_
新的貢獻者二世

你好,

我從SQL Server進口一些數據和存儲過程成磚,我注意到與不支持連接在火花SQL更新,選擇我可以用什麼?這是我想做的事:

更新t1組t1。colB =當t2.colB > t1。colB然後t2。其他colB t1。colB + t2。從table1 t1內連接表t2 colB結束t1.colA = t2。可樂t2.colC =“XYZ”< br >

我無法做的另一件事Spak SQL的交叉應用和外部應用,有替代那些2嗎?

提前謝謝。

邁克

1接受解決方案

接受的解決方案

李
貢獻者

嗨@Mike K。,

火花是不同的分布式體係結構比傳統的RDBMS,你肯定會發現一些功能不支持1:1。為您的特定問題,我建議執行條件邏輯和過濾到一個臨時結構,然後使用

合並成
聲明https://docs.m.eheci.com/spark/latest/spark-sql/language-manual/merge-into.html。這假定您正在使用(棒)三角洲體係結構和存儲格式,符合acid類型將事務處理。肯定有其他方式來完成,但是這是一個這樣的方法:

創建臨時視圖選擇dt₁加入。可樂,當dt2.colB > dt₁。colB然後dt2。其他colB dt₁。colB + dt2。colB結束從dt₁colB內連接dt2 dt1.colA = dt2。可樂,dt2.colC =“XYZ”;並入dt₁使用加入dt1.colA =加入。可樂當匹配更新設置colB = joined.colB;

工作這是我的筆記本,它顯示了繁殖的失敗和步驟到最後的答案:

https://databricks-prod-cloudfront.cloud.m.eheci.com/public/4027ec902e239c93eaaa8714f173bcfc/3249..。

或在github:https://github.com/leedabee/databricks -論壇-支持- notebooks/tree/master/db -論壇- 29380

希望這能給你一些幫助!

在原帖子查看解決方案

5回複5

李
貢獻者

嗨@Mike K。,

火花是不同的分布式體係結構比傳統的RDBMS,你肯定會發現一些功能不支持1:1。為您的特定問題,我建議執行條件邏輯和過濾到一個臨時結構,然後使用

合並成
聲明https://docs.m.eheci.com/spark/latest/spark-sql/language-manual/merge-into.html。這假定您正在使用(棒)三角洲體係結構和存儲格式,符合acid類型將事務處理。肯定有其他方式來完成,但是這是一個這樣的方法:

創建臨時視圖選擇dt₁加入。可樂,當dt2.colB > dt₁。colB然後dt2。其他colB dt₁。colB + dt2。colB結束從dt₁colB內連接dt2 dt1.colA = dt2。可樂,dt2.colC =“XYZ”;並入dt₁使用加入dt1.colA =加入。可樂當匹配更新設置colB = joined.colB;

工作這是我的筆記本,它顯示了繁殖的失敗和步驟到最後的答案:

https://databricks-prod-cloudfront.cloud.m.eheci.com/public/4027ec902e239c93eaaa8714f173bcfc/3249..。

或在github:https://github.com/leedabee/databricks -論壇-支持- notebooks/tree/master/db -論壇- 29380

希望這能給你一些幫助!

BhaktiAbhyankar
新的貢獻者二世

我有一個問題,我想與連接查詢SQL UPDATE轉化為合並。

我沒有兩個表中主鍵或唯一鍵(加入)執行。因此在合並,得到錯誤

錯誤的SQL語句:UnsupportedOperationException:方式不能執行合並多個源行匹配並試圖修改同一個目標行三角洲的表的方式可能是相互衝突的。一些能幫我解決這個問題嗎?

BisharathSthapi
新的貢獻者二世

@Mike k .沒有使用視圖,我添加了一個解決方案。

temp_df = df2。加入(df1,“可樂”=“左”)。選擇(“*”,df1.colB.alias (“df1_colB”)) .drop (df1.colB)
df2 = temp_df。withColumn (“colB”(卡紮菲(col (colB) < = (“df1_colB”)) \ & (temp_df.df1_colB.isNotNull ()) \ & (temp_df。colC = =“XYZ”),坳(“colB”) +坳(“df1_colB”)) .otherwise (col (“colB”))) \ .drop (“df1_colB”)

鏈接的完整代碼在筆記本w /說明:

https://github.com/bsthapit/Databricks_Solutions/blob/master/db_29380.ipynb

MikeK_
新的貢獻者二世

謝謝你的回答,我走了@李的建議,因為我們需要在SQL代碼運行,但我將測試python代碼,@Bisharath Sthapit,後來,看看是否有任何性能收益。

歡呼,

邁克

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

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

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

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

Baidu
map