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

在Trino/Presto中展开JSON对象元素,拆分用户数据为多列

解决方案

你可以通过解析JSON为Map类型,再借助UNNEST(map_entries())同时提取邮箱(键)和对应的数组值,最后从数组中拆分出两个元素作为单独列。完整查询语句如下:

SELECT
    entry.key AS splitUsers,
    CAST(json_extract(entry.value, '$[0]') AS DOUBLE) AS firstValue,
    CAST(json_extract(entry.value, '$[1]') AS DOUBLE) AS secondValue
FROM
    tableName,
    UNNEST(map_entries(CAST(json_parse(users) AS MAP(VARCHAR, JSON)))) AS entry

步骤说明

  • 解析JSON为Map:CAST(json_parse(users) AS MAP(VARCHAR, JSON)) 将users列的JSON字符串转换为键为邮箱字符串、值为JSON数组的Map结构。
  • 拆分Map为行:UNNEST(map_entries(...)) 把Map中的每一组键值对拆成单独的行,每行包含一个邮箱(entry.key)和对应的数组(entry.value)。
  • 提取数组元素:json_extract(entry.value, '$[0]') 和 json_extract(entry.value, '$[1]') 分别从JSON数组中取出第一个、第二个元素,再转为DOUBLE类型得到数值列。

简化写法(部分SQL引擎支持)

如果你的SQL引擎(比如Snowflake)支持直接对类型化数组使用索引,可以把Map的值类型指定为ARRAY(DOUBLE),这样就能直接通过索引访问元素:

SELECT
    entry.key AS splitUsers,
    entry.value[0] AS firstValue,
    entry.value[1] AS secondValue
FROM
    tableName,
    UNNEST(map_entries(CAST(json_parse(users) AS MAP(VARCHAR, ARRAY(DOUBLE))))) AS entry

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:33:34