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

使用“XML路徑”火花SQL SQL語法

oleole
貢獻者

我用火花版本3.2.1磚(DBR 10.4 LTS),我試圖將sql server sql查詢轉換成一個新的火花集群上運行的sql查詢使用火花sql sql語法。然而,火花sql似乎並不支持XML路徑作為和我想知道如果有一個函數替代方法將這個sql server查詢轉換成一個sql查詢sql將接受火花。原始的sql服務器sql查詢是這樣的:

刪除表如果存在UserCountry;

如果不存在UserCountry創建表(

UserID INT,

國家VARCHAR (5000)

);

插入UserCountry

選擇

l用戶標識作為標識,

合並(

的東西(

(選擇',' + LC。國家從UserStopCountry LC L。用戶id = LC。UserID XML路徑("))

,1 2”)

”)

LK_ETLRunUserID L

當我運行上麵的查詢在磚火花的sql,我得到以下錯誤:

拋出ParseException:

不匹配輸入的“期待{')','。”、“[”、“和”、“之間”、“集群”、“分配”、“DIV”、“除”、“集團”、“在”、“相交”、“”、“”、“像”、“我喜歡”、“限製“不,”或”、“秩序”、“有資格”RLIKE,“-”、“分類”、“聯盟”、“窗口”,情商,”< = >”、“< >”、“!=”、“<”,LTE,“>”,一種“+”、“-”、“*”、“/”、“%”、“&”、“|”、“| |”、“^”、“:”、“::”}(第6行,pos 80)

SQL = = = =

插入UserCountry

選擇

l用戶標識作為標識,

合並(

的東西(

(選擇',' + LC。國家從UserStopCountry LC L。用戶id = LC。UserID XML路徑("))

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ^ ^ ^

,1 2”)

”)

LK_ETLRunUserID L

鑒於UserStopCountry看起來像這樣:

輸入

我相信輸出將會是:

輸出

1接受解決方案

接受的解決方案

oleole
貢獻者

帖子我最後使用的解決方案:

% sql DROP TABLE如果存在UserCountry;創建表如果不存在UserCountry (UserID INT,國家VARCHAR (5000));插入UserCountry選擇L。用戶標識作為標識,CONCAT_WS(',', collect_list(LC.Country)) AS Country COALESCE( STUFF( (SELECT ', ' + LC.Country FROM UserStopCountry LC WHERE L.UserID = LC.UserID FOR XML PATH ('')) , 1, 2, '') , '') AS Country FROM LK_ETLRunUserID L INNER JOIN UserStopCountry LC ON L.UserID = LC.UserID GROUP By L.UserID

在原帖子查看解決方案

3回複3

daniel_sahal
尊敬的貢獻者三世

@Jay楊

您可以使用array_join和collect_list的組合。請參見下麵的例子。

源表:

圖像後轉換:

圖像

Vidula_Khanna
主持人
主持人

嗨@Jay楊

謝謝你發布你的問題在我們的社區!我們很高興幫助你。

幫助我們為您提供最準確的信息,請您花一些時間來回顧反應和選擇一個最好的回答了你的問題嗎?

這也將有助於其他社區成員可能也有類似的問題在未來。謝謝你的參與,讓我們知道如果你需要任何進一步的援助!

oleole
貢獻者

帖子我最後使用的解決方案:

% sql DROP TABLE如果存在UserCountry;創建表如果不存在UserCountry (UserID INT,國家VARCHAR (5000));插入UserCountry選擇L。用戶標識作為標識,CONCAT_WS(',', collect_list(LC.Country)) AS Country COALESCE( STUFF( (SELECT ', ' + LC.Country FROM UserStopCountry LC WHERE L.UserID = LC.UserID FOR XML PATH ('')) , 1, 2, '') , '') AS Country FROM LK_ETLRunUserID L INNER JOIN UserStopCountry LC ON L.UserID = LC.UserID GROUP By L.UserID

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

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

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

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

Baidu
map