Databricks SQL string_agg

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

希望快点;

将一些本地 SQL 视图迁移到 Databricks,并努力寻找某些函数的转换。主要的就是

string_agg
功能。

string_agg(field_name, ', ')

有人知道如何将其转换为 Databricks SQL 吗?

提前致谢。

sql databricks
4个回答
20
投票

粗略的等效方法是使用

collect_set
array_join
但请注意,您已经丢失了订单:

%sql
SELECT col1, array_join(collect_set(col2), ',') j
FROM tmp
GROUP BY col1

我不认为

STRING_AGG
保证顺序(除非您指定
WITHIN GROUP...ORDER BY
子句),但您应该期望顺序 not 匹配。 希望该顺序对您的流程无关紧要,但您应该仔细检查它不会对您的流程产生任何影响。 根据官方文档

[

collect_list
] 是不确定的,因为收集的顺序 结果取决于行的顺序,这可能是 洗牌后不确定。

他们最近将

STRING_AGG
的序数参数添加到 Azure SQL DB、托管实例和 Synapse,但想必您在本地还没有该功能。


3
投票

感谢@wBob 的回答。我可以通过以下方式修改您的代码来保证排序:

array_join(array_sort(collect_set(col2)),",") j

array_sort()collect_set()返回的项目进行排序,array_join()将该输出转换为单个字符串。


0
投票

Databricks SQL 支持仅适用于基本 SQL 查询。因此,当前的 Databricks SQL 版本不支持面向过程的查询。这将属于新功能请求。您只能处理基本的 SQL 函数 link

注意:Databricks SQL 为希望在数据湖上运行快速即席查询、创建多种可视化类型以从不同角度探索查询结果以及构建和共享仪表板的 SQL 用户提供了简单的体验。它不应取代我们当前正在处理的在 Python/PySpark 中运行的 ETL 工作负载。


-2
投票

您可以按照此处所述使用连接函数 https://spark.apache.org/docs/latest/api/sql/index.html#concat_ws

SELECT concat_ws(' ', 'Spark', 'SQL');
© www.soinside.com 2019 - 2024. All rights reserved.