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不存在的场景,返回预设的默认值
测试结果(对应示例数据)
| id | accept_language | user_agent |
|---|---|---|
| 0 | it-IT | Mozilla/5.0 |
| 1 | de-DE | Chrome/55.0 |
| 2 | N/A | N/A |
内容的提问来源于stack exchange,提问作者Donovan
相关产品推荐
相关产品推荐

