Hive
行转列和列转行
- 表1:cityInfo
cityname | regionname |
---|---|
上海 | 四川北路 |
上海 | 虹梅路 |
上海 | 音乐学院 |
上海 | 徐家汇 |
上海 | 陆家嘴 |
上海 | 古北 |
北京 | 东四 |
北京 | 复兴门 |
北京 | 新街口 |
北京 | 地安门 |
- 表2:cityInfoSet
cityname | regionname |
---|---|
上海 | 四川北路,虹梅路,音乐学院,徐家汇,陆家嘴,古北 |
北京 | 地安门,复兴门,东四,新街口 |
表1和表2的结构如上所示。如何在 hive 中使用 Hql 语句对表1和表2进行互相转化呢?
行转列
表1=>表2 可以使用 hive 的内置函数 concat_ws() 和 collect_set()进行转换:
执行代码如下所示:
select cityname,concat_ws(',',collect_set(regionname)) as address_set from cityInfo group by cityname;
列转行
表2=>表1 可以使用 hive 的内置函数 explode()进行转化。代码如下:
select cityname, region from cityInfoSet lateral view explode(split(address_set, ',')) aa as region;