hive應(yīng)用:將一行變成多行

背景

經(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

大功告成!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容