在Trino中将array类型字段拆分为多列
在Trino中将array(varchar)拆分为指定列的方法
要实现把数组拆成以PersonX为列名的结构,核心思路是先将数组转换为Map类型,再通过键提取对应值,缺失的键会自动返回null。具体步骤如下:
将数组元素转换为键值对并生成Map
使用transform遍历数组中的每个元素,通过split_part拆分出每个元素的键(PersonX)和值;再用map_from_entries把这些键值对转换成Map。从Map中提取各列的值
直接通过Map['键名']的方式提取对应值,没有对应键的列会自动填充null。
完整SQL示例
假设你的表名为your_table,执行以下SQL即可得到目标结果:
SELECT person_map['Person1'] AS Person1, person_map['Person2'] AS Person2, person_map['Person3'] AS Person3, person_map['Person4'] AS Person4 FROM ( SELECT map_from_entries( transform(colA, x -> row(split_part(x, '=', 1), split_part(x, '=', 2))) ) AS person_map FROM your_table ) t;
补充说明
- 如果后续有更多PersonX列需要添加,只需在SELECT子句中继续追加
person_map['PersonX'] AS PersonX即可。 - 使用
split_part而非split,可以避免元素中包含多个=符号时的拆分错误,确保只按第一个等号拆分键和值。
内容的提问来源于stack exchange,提问作者Mihir Sawant
相关产品推荐
相关产品推荐

