我在 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 | “美国” |