在Hive中拆分数组主要通过`split`和`explode`函数实现,结合`LATERAL VIEW`使用。以下是具体用法及示例:
一、拆分数组的基本方法
使用`split`函数 将字符串按指定分隔符拆分为数组。例如,将城市名称按逗号分隔:
```sql
SELECT split(city, ',') AS city_array
FROM your_table;
```
结果为:`["北京", "上海", "河北", "山东", "山西", "天津"]`。
使用`explode`函数展开数组
将数组拆分为多行,每行对应数组中的一个元素。需结合`LATERAL VIEW`使用:
```sql
SELECT id, b
FROM your_table t
LATERAL VIEW explode(split(city, ',')) a AS b;
```
结果为每行对应一个城市名称。
二、拆分后的处理
排序与重组
拆分后可通过`ORDER BY`排序,再使用`COLLECT_LIST`聚合:
```sql
SELECT t.id, COLLECT_LIST(sorted_row) AS sorted_my_array
FROM your_table t
LATERAL VIEW explode(split(city, ',')) sorted_row
ORDER BY sorted_row
GROUP BY t.id;
```
该示例将城市按字母顺序排序后重新组合为数组。
拆分Map类型数据
使用`explode`拆分Map时,可同时生成新列:
```sql
SELECT id, explode(goods) AS key, value
FROM your_table
LATERAL VIEW explode(map_col) goods;
```
结果为每行包含键值对。
三、注意事项
特殊字符处理: 若分隔符为正则表达式中的特殊字符(如`|`),需用反斜杠转义: ```sql split('192.168.0.1|10.0.0.1', '|') AS ip_array; ``` 性能优化
通过以上方法,可灵活实现Hive中数组的拆分与处理。