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

如何在Databricks中转置字符型数据?

在Databricks中实现SAS式的数据转置操作

解决思路

你遇到的核心问题是Spark SQL的Pivot必须配合聚合函数,但只要先给每个id_request下的letter生成唯一序号,就能用聚合函数取到唯一值,实现类似SAS的转置效果。

具体操作

  • 生成分组内序号
    用窗口函数给每个id_request下的letter按顺序编号,确保每个序号对应唯一的letter:

    WITH numbered_data AS (
        SELECT 
            id_request,
            letter,
            -- 按id_request分组,给每组的letter编序号(可按需求调整ORDER BY字段)
            ROW_NUMBER() OVER (PARTITION BY id_request ORDER BY letter) AS rn
        FROM your_table_name -- 替换成你的实际表名
    )
    
  • 执行Pivot转置
    利用生成的序号做Pivot,因为每个序号对应唯一的letter,用FIRST()或MAX()聚合都能拿到正确值:

    SELECT 
        id_request,
        `1` AS col1,
        `2` AS col2,
        `3` AS col3 -- 如果有更多列,继续添加`4` AS col4以此类推
    FROM numbered_data
    PIVOT (
        FIRST(letter) -- 取唯一的letter值
        FOR rn IN (1, 2, 3) -- 这里的数字对应生成的序号,按需添加
    )
    ORDER BY id_request;
    

补充说明

  • 要是你的数据里id_request对应的letter数量不固定,比如有的有4个甚至更多,可以把Pivot里的序号列表扩展成(1,2,3,4,...),没对应值的列会显示NULL。
  • 窗口函数里的ORDER BY letter可以换成你需要的排序逻辑,比如按数据插入顺序的话,如果有时间戳字段就用时间戳排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:22:42