天天看點

Hive-行轉列和列轉行(轉載)

Hive

行轉列和列轉行

表1:cityInfo

cityname    regionname

上海    四川北路

上海    虹梅路

上海    音樂學院

上海    徐家彙

上海    陸家嘴

上海    古北

北京    東四

北京    複興門

北京    新街口

北京    地安門

表2:cityInfoSet

cityname    address_set

上海    四川北路,虹梅路,音樂學院,徐家彙,陸家嘴,古北

北京    地安門,複興門,東四,新街口

表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;

繼續閱讀