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;