在 sql 语法中使用 Databricks Spark SQL 中的“FOR XML PATH”

问题描述 投票:0回答:0

我在 databricks (DBR 10.4 LTS) 上使用 spark 版本 3.2.1,我正在尝试使用 sql 语法中的 spark sql 将 sql server 查询转换为在 spark 集群上运行的 databricks sql 查询。但是,spark sql 似乎不支持 XML PATH 作为 SQL 函数,我想知道是否有其他方法可以将此 sql server 查询转换为 spark sql 将接受并运行的 sql 查询。原始的 sql server 查询看起来像这样,当我在数据块中运行它时:

%sql
DROP TABLE if exists UserCountry;
CREATE TABLE if not exists UserCountry (
  UserID INT,
  Country VARCHAR(5000)
);
INSERT INTO UserCountry
SELECT 
    L.UserID AS UserID,
    COALESCE(
        STUFF(
            (SELECT ', ' + LC.Country FROM UserStopCountry LC WHERE L.UserID = LC.UserID FOR XML PATH (''))
            , 1, 2, '')
        , '') AS Country
FROM 
LK_ETLRunUserID L

当我在 databricks spark sql 中运行上面的查询时,出现以下错误:

ParseException: 
mismatched input 'FOR' expecting {')', '.', '[', 'AND', 'BETWEEN', 'CLUSTER', 'DISTRIBUTE', 'DIV', 'EXCEPT', 'GROUP', 'HAVING', 'IN', 'INTERSECT', 'IS', 'LIKE', 'ILIKE', 'LIMIT', NOT, 'OR', 'ORDER', 'QUALIFY', RLIKE, 'MINUS', 'SORT', 'UNION', 'WINDOW', EQ, '<=>', '<>', '!=', '<', LTE, '>', GTE, '+', '-', '*', '/', '%', '&', '|', '||', '^', ':', '::'}(line 6, pos 80)

== SQL ==
INSERT INTO UserCountry
SELECT 
    L.UserID AS UserID,
    COALESCE( 
        STUFF( 
            (SELECT ', ' + LC.Country FROM UserStopCountry LC WHERE L.UserID = LC.UserID FOR XML PATH ('')) 
--------------------------------------------------------------------^^^
            , 1, 2, '')
        , '') AS Country
FROM 
LK_ETLRunUserID L

鉴于 UserStopCountry 看起来像这样:

用户ID 国家
1 “美国”
1 “美国”
2 '墨西哥'
2 “美国”
3 “美国”

我相信输出将是:

用户ID 国家
1 '美国','美国'
2 “墨西哥”、“美国”
3 “美国”
sql-server apache-spark xml-parsing databricks-sql
© www.soinside.com 2019 - 2024. All rights reserved.