Hive中如何按双分隔符拆分字符串或遍历数组二次拆分?
在Hive中实现多分隔符字符串拆分的方案
方案1:拆分数组后遍历元素二次拆分(适合键值对数量不固定的场景)
先通过split按;将原字符串拆分为数组,再用LATERAL VIEW explode将数组展开为行,最后对每行元素按=拆分提取键值:
SELECT split(item, '=')[0] AS id, split(item, '=')[1] AS fruit FROM ( SELECT split("123=apples;456=oranges", ";") AS arr ) t LATERAL VIEW explode(arr) exploded AS item;
执行后会得到两行结果:
| id | fruit |
|---|---|
| 123 | apples |
| 456 | oranges |
方案2:用transform函数直接生成嵌套数组
如果需要保留数组结构,将每个元素拆分为子数组,可使用Hive的transform函数对数组内每个元素应用拆分逻辑:
SELECT transform(arr, x -> split(x, '=')) AS split_result FROM ( SELECT split("123=apples;456=oranges", ";") AS arr ) t;
执行结果为嵌套数组:[["123","apples"],["456","oranges"]]
方案3:一次性多分隔符拆分(适合固定数量键值对)
如果已知键值对数量固定,可直接用;|=作为分隔符一次性拆分字符串,再按索引提取对应内容:
SELECT split(str, ';|=')[0] AS id1, split(str, ';|=')[1] AS fruit1, split(str, ';|=')[2] AS id2, split(str, ';|=')[3] AS fruit2 FROM ( SELECT "123=apples;456=oranges" AS str ) t;
内容的提问来源于stack exchange,提问作者dataviews
相关产品推荐
相关产品推荐

