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

如何在Presto中按列名拆分实现列转行并提取前缀为值?

在Presto中通过列名拆分实现宽表转窄表

当然可以实现,你可以通过构造键值对结构并配合unnest展开,再提取列名中的小时部分来完成转换。以下是两种具体的实现方式:

方法一:使用ROW构造数组后展开

SELECT
    pageurl,
    -- 从列名中提取小时部分:截取'hourXX_visits'里的XX
    SUBSTRING(hour_col, 5, 2) AS hour,
    visits
FROM
    your_table
CROSS JOIN UNNEST(
    ARRAY[
        CAST(ROW('hour01_visits', hour01_visits) AS ROW(hour_col VARCHAR, visits INTEGER)),
        CAST(ROW('hour02_visits', hour02_visits) AS ROW(hour_col VARCHAR, visits INTEGER))
    ]
) AS t(hour_col, visits);

方法二:使用Map结构展开

SELECT
    pageurl,
    SUBSTRING(map_key, 5, 2) AS hour,
    map_value AS visits
FROM
    your_table
CROSS JOIN UNNEST(
    map_entries(
        MAP(
            ARRAY['hour01_visits', 'hour02_visits'],
            ARRAY[hour01_visits, hour02_visits]
        )
    )
) AS t(map_key, map_value);

这两种方法本质都是把每一行的小时列和对应访问量配对成结构,再通过UNNEST拆分成多行,最后用SUBSTRING从列名中提取出小时编号,完美匹配你想要的输出结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:40:15