背景
經(jīng)常需要處理如下的數(shù)據(jù)
原始數(shù)據(jù)
第一列是項目名稱遥缕,第二列是項目經(jīng)理id,一個項目有多個項目經(jīng)理,現(xiàn)在需要將數(shù)據(jù)變成一行只有一個項目經(jīng)理逮矛,轉(zhuǎn)換后的數(shù)據(jù)如下:
轉(zhuǎn)換后的數(shù)據(jù)
解決方案
這里需要用到split函數(shù)和explode函數(shù)。
split函數(shù)可以將字符串按分隔符變成數(shù)組
explode是hive的一個UDTF函數(shù),具體什么是UDTF函數(shù)呢赡译?
table-generating functions transform a single input row to multiple output rows
其實就是一行變多行的函數(shù)
explode具體用法可以參考官網(wǎng)
第一步
用split函數(shù)將字符串轉(zhuǎn)換成數(shù)組
select project_name,split(project_manager_id,',') from default.t_project_info;
>
電商&營銷 ["23","25","14","13"]
杭州服務中心 ["52","54"]
碼龍系統(tǒng)組 ["16","12","19"]
第二步
用explode函數(shù)將數(shù)組變成多行
SELECT project_name, manager_id
FROM t_project_info
LATERAL VIEW explode(split(project_manager_id,",")) tmp AS manager_id
>
電商&營銷 23
電商&營銷 25
電商&營銷 14
電商&營銷 13
杭州服務中心 52
杭州服務中心 54
大功告成!