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

PrestoDB如何从数组结构体中提取并转换匹配的指定值

PrestoDB 提取数组结构体中指定name对应的value(无重复行)

可以通过Presto的数组过滤与取值函数直接在原行上处理,完全避免UNNEST导致的重复行问题,具体实现如下:

实现SQL

SELECT
    id,
    -- 提取accept-language对应的值,不存在时返回自定义默认值
    coalesce(
        array_get(
            filter(complexcolumn, item -> item.name = 'accept-language'),
            1
        ).value,
        'N/A' -- 可根据需求替换为null或其他默认值
    ) AS accept_language,
    -- 提取user-agent对应的值,不存在时返回自定义默认值
    coalesce(
        array_get(
            filter(complexcolumn, item -> item.name = 'user-agent'),
            1
        ).value,
        'N/A'
    ) AS user_agent
FROM your_table;

逻辑说明

  • filter(complexcolumn, item -> item.name = 'xxx'):从目标数组中筛选出name匹配指定值的结构体,返回仅包含匹配项的子数组(假设每个name在数组中唯一,子数组最多1个元素)
  • array_get(..., 1):取出筛选后子数组的第一个元素(Presto数组索引从1开始)
  • .value:访问结构体中的value字段
  • coalesce(...):处理目标name不存在的场景,返回预设的默认值

测试结果(对应示例数据)

idaccept_languageuser_agent
0it-ITMozilla/5.0
1de-DEChrome/55.0
2N/AN/A

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:29:54