You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求将Presto SQL中的MAP_AGG子查询转换为Databricks SQL

Presto SQL转Databricks SQL:MAP_AGG替代方案

直接替代MAP_AGG的正确写法

在Databricks SQL中,没有直接对应的MAP_AGG函数,但可以通过collect_list聚合键和值的数组,再用map_from_arrays转换为Map类型,完美匹配原Presto逻辑:

PSF_PIVOT
AS (SELECT A.PATIENT_ID, A.REPORT_ID, A.VISIT_DATE, A.DISEASE_GROUP, 
            map_from_arrays(collect_list(A.NAME), collect_list(A.VALUE)) AS KV
    FROM PSF_BEST A
    GROUP BY A.PATIENT_ID, A.REPORT_ID, A.VISIT_DATE, A.DISEASE_GROUP
   )

为什么直接用MAP会报错?

你之前尝试用MAP替代MAP_AGG报错,核心原因是MAP是单行构造函数,只能基于单条记录的字段生成Map,无法对分组后的多条记录做聚合操作。必须先通过聚合函数(比如collect_list)收集分组内所有的NAME和VALUE,再用map_from_arrays将两个数组对应组合成Map。

补充:用PIVOT实现列转行(若需展开为列)

如果你的需求是把NAME作为列名、VALUE作为列值(而非生成Map),可以使用Databricks的PIVOT语法:

PSF_PIVOT
AS (SELECT *
    FROM PSF_BEST
    PIVOT (
      -- 根据VALUE的数据类型选择聚合函数,字符串用first,数值用sum等
      first(VALUE) FOR NAME IN ('name1', 'name2', 'name3') -- 替换为你的实际NAME取值
    )
    GROUP BY PATIENT_ID, REPORT_ID, VISIT_DATE, DISEASE_GROUP
   )

注意:PIVOT需要明确指定要转置的NAME值,无法像MAP_AGG那样动态生成所有键值对。

内容的提问来源于stack exchange,提问作者Gaurav Sitaula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:45:09