您好,登錄后才能下訂單哦!
本篇內容主要講解“Hive行轉列的實現方式”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Hive行轉列的實現方式”吧!
傳統關系型數據庫中,無論是Oracle(11g之后)還是SQLserver(2005之后),都自帶了Pivot函數實現行轉列功能,本文主要講述在Hive中實現行轉列的兩種方式。
這種方式是借鑒在Oracle或者SQLserver在支持Pivot函數之前實現行轉列的方式,實際上語法沒有什么變化,只是換成了Hive。
with testtable(
select 1 id,'k1' key,123 value
union all
select 1,'k2' key,124 value
union all
select 2,'k1',234 value
)
select id,
max(case when key='k1' then value else null end) k1,
max(case when key='k2' then value else null end) k2
from testtable
group by id
這種方式的思路是把需要轉列的字段及其值字段拼接成一個Hive上的key-value的map數據,具體Sql如下:
with testtable(
select 1 id,'k1' key,123 value
union all
select 1,'k2' key,124 value
union all
select 2,'k1',234 value
)
select id,kv['k1'],kv['k2']
from (
select id,str_to_map(concat_ws(',', collect_set(concat(key, '-', value))),',','-') kv
from testtable
group by id)t
兩種方式都可以實現行轉列的功能,傳統的方式易于理解,但在key的取值比較多的時候,寫起來會相當繁瑣,map的方式相對要簡便一些。但map的方式所有的數據都collect到一起了,對內存的要求會高一些,而傳統的方式通過聚合函數直接reduce,可以邊運行邊求值。
到此,相信大家對“Hive行轉列的實現方式”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。