数据块 SQL string_agg
Databricks SQL string_agg
希望快点;
将一些本地 SQL 视图迁移到 Databricks 并努力寻找某些功能的转换。主要的是 string_agg 函数。
string_agg(field_name, ', ')
有谁知道如何将其转换为 Databricks SQL?
提前致谢。
您可以按照此处所述使用连接函数
https://spark.apache.org/docs/latest/api/sql/index.html#concat_ws
SELECT concat_ws(' ', 'Spark', 'SQL');
大致相当于使用 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 匹配。希望订单对您的流程无关紧要,但您应该仔细检查它对您的流程没有任何影响。根据 official documentation:
[collect_list
] is non-deterministic because the order of collected
results depends on the order of the rows which may be
non-deterministic after a shuffle.
他们最近将 STRING_AGG
的序数参数添加到 Azure SQL 数据库、托管实例和 Synapse,但大概您还没有本地功能。
Databricks SQL 支持仅针对基本 SQL 查询。因此,当前的 Databricks SQL 版本不支持面向过程的查询。这将属于新功能请求。您只能处理基本 SQL 功能 link
注意:Databricks SQL 为 SQL 用户提供了一种简单的体验,他们希望 运行 在他们的数据湖上进行快速临时查询,创建多种可视化类型来探索查询结果从不同的角度,构建和共享仪表板。它不应该取代我们目前正在处理的 Python/PySpark 中的 ETL 工作负载 运行ning。
感谢@wBob 的回答。我可以通过以下方式修改您的代码来保证排序:
array_join(array_sort(collect_set(col2)),",") j
array_sort() 对 [= 返回的项目进行排序28=]() 和 array_join() 将输出转换为单个字符串.
希望快点;
将一些本地 SQL 视图迁移到 Databricks 并努力寻找某些功能的转换。主要的是 string_agg 函数。
string_agg(field_name, ', ')
有谁知道如何将其转换为 Databricks SQL?
提前致谢。
您可以按照此处所述使用连接函数 https://spark.apache.org/docs/latest/api/sql/index.html#concat_ws
SELECT concat_ws(' ', 'Spark', 'SQL');
大致相当于使用 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 匹配。希望订单对您的流程无关紧要,但您应该仔细检查它对您的流程没有任何影响。根据 official documentation:
[
collect_list
] is non-deterministic because the order of collected results depends on the order of the rows which may be non-deterministic after a shuffle.
他们最近将 STRING_AGG
的序数参数添加到 Azure SQL 数据库、托管实例和 Synapse,但大概您还没有本地功能。
Databricks SQL 支持仅针对基本 SQL 查询。因此,当前的 Databricks SQL 版本不支持面向过程的查询。这将属于新功能请求。您只能处理基本 SQL 功能 link
注意:Databricks SQL 为 SQL 用户提供了一种简单的体验,他们希望 运行 在他们的数据湖上进行快速临时查询,创建多种可视化类型来探索查询结果从不同的角度,构建和共享仪表板。它不应该取代我们目前正在处理的 Python/PySpark 中的 ETL 工作负载 运行ning。
感谢@wBob 的回答。我可以通过以下方式修改您的代码来保证排序:
array_join(array_sort(collect_set(col2)),",") j
array_sort() 对 [= 返回的项目进行排序28=]() 和 array_join() 将输出转换为单个字符串.