天天看點

Hive 行轉列 explode和inline(lateral view)Hive 行轉列 explode和inline(lateral view)

@羲凡——隻為了更好的活着

Hive 行轉列 explode和inline(lateral view)

任何一個資料庫都會涉及到行轉列的問題,也同時會有相應的方法,比如mysql中的pivot。hive中使用的則是 lateral view explode 或者 lateral view inline

1.文法說明

a.lateral view explode

select source_column,new_column 
from source_table 
lateral view explode(source_column) new_table as new_column;
           

source_table:表示需要行轉列的表

source_column:表示 source_table 中需要行轉列的列

new_table:表示 lateral view explode 生成的新表名

new_column:表示 source_column 行轉列後生成的新列名

b.lateral view inline

select source_column,new_column1,new_column2
from source_table 
lateral view inline(source_column) new_table as new_column1,new_column2;
           

source_table:表示需要行轉列的表

source_column:表示 source_table 中需要行轉列的列

new_table:表示 lateral view explode 生成的新表名

new_column1:表示 source_column 的key行轉列後生成的新列名

new_column2:表示 source_column 的value行轉列後生成的新列名

2.建立表

CREATE TABLE `aarontest.table_array_struct_map`(
  `id` int, 
  `name` string,
  `attribute` array<struct<key:string,value:string>>)
ROW FORMAT delimited fields terminated by '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':';
           

3.加載資料

檢視導入結果

Hive 行轉列 explode和inline(lateral view)Hive 行轉列 explode和inline(lateral view)

4.行轉列(explode)

select name,c1.value from 
table_array_struct_map 
lateral view explode(attribute) t1 as c1 
where c1.key="city";
           
Hive 行轉列 explode和inline(lateral view)Hive 行轉列 explode和inline(lateral view)

5.行轉列(inline)

select name,c2 
from table_array_struct_map 
lateral view inline(attribute) t1 as c1,c2 
where c1="city";
           
Hive 行轉列 explode和inline(lateral view)Hive 行轉列 explode和inline(lateral view)

===================================================================

@羲凡——隻為了更好的活着

若對部落格中有任何問題,歡迎留言交流

繼續閱讀