背景
經(jīng)常需要處理如下的數(shù)據(jù)

原始數(shù)據(jù)
第一列是項(xiàng)目名稱,第二列是項(xiàng)目經(jīng)理id,一個(gè)項(xiàng)目有多個(gè)項(xiàng)目經(jīng)理,現(xiàn)在需要將數(shù)據(jù)變成一行只有一個(gè)項(xiàng)目經(jīng)理,轉(zhuǎn)換后的數(shù)據(jù)如下:

轉(zhuǎn)換后的數(shù)據(jù)
解決方案
這里需要用到split函數(shù)和explode函數(shù)。
split函數(shù)可以將字符串按分隔符變成數(shù)組
explode是hive的一個(gè)UDTF函數(shù),具體什么是UDTF函數(shù)呢?
table-generating functions transform a single input row to multiple output rows
其實(shí)就是一行變多行的函數(shù)
explode具體用法可以參考官網(wǎng)
第一步
用split函數(shù)將字符串轉(zhuǎn)換成數(shù)組
select project_name,split(project_manager_id,',') from default.t_project_info;
>
電商&營(yíng)銷 ["23","25","14","13"]
杭州服務(wù)中心 ["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
>
電商&營(yíng)銷 23
電商&營(yíng)銷 25
電商&營(yíng)銷 14
電商&營(yíng)銷 13
杭州服務(wù)中心 52
杭州服務(wù)中心 54
大功告成!