我用火花版本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看起來像這樣:
我相信輸出將會是:
帖子我最後使用的解決方案:
% 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
帖子我最後使用的解決方案:
% 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