hivesql 行列轉換

2021-10-21 21:07:14 字數 2587 閱讀 7896

1.1源表person_info:

name

constellation

blood_type

張三白羊座a李四

射手座a

王五白羊座b趙六

白羊座a

劉七射手座

a1.2需求:把星座和血型一樣的人歸類到一起,如下表:

cbtname

射手,a

李四,劉七

白羊,a

張三,趙六

白羊,b

王五1.3函式:

concat(欄位1

,分割符,欄位2

)--將一行的多個字串合併成乙個字串

concat_ws(分割符,欄位1

)--將一列的多個字串按指定分隔符合併成乙個字串 group by ...

collect_set(字段)

--合併的字段去重 搭配使用 concat_ws(',',collect_set(name))

collect_list(字段)

--合併的字段不去重 concat_ws(',',collect_list(name))

1.4**:
select

cbt,

concat_ws(

',',collect_list(name)

)as name

from

(select

concat(constellation,

',',blood_type)

as cbt,

name

from person_info

) tmp

group

by cbt

;

1.5結果展示:
ok

+--------+--------+--+

| cbt | name |

+--------+--------+--+

| 射手座,a | 李四,劉七 |

| 白羊座,a | 張三,趙六 |

| 白羊座,b | 王五 |

+--------+--------+--+

3rows selected (

72.361 seconds)

0: jdbc:hive2://wxt01:10000>

2.1源表movie

name

category

《疑犯追蹤》

懸疑,動作,科幻,劇情

《lie to me》

懸疑,警匪,動作,心理,劇情

《戰狼2》

戰爭,動作,災難

2.2需求:將電影分類中的陣列資料展開。結果如下:

《疑犯追蹤》      懸疑

《疑犯追蹤》 動作

《疑犯追蹤》 科幻

《疑犯追蹤》 劇情

《lie to me》 懸疑

《lie to me》 警匪

2.4函式
explode(字段)

--將hive中一列中複雜的array或map結構拆分成多行(炸裂)

--使用 lateral view explode(category)

2.3**
select

name,

category_name

from movie

lateral view explode(category) a as category_name

;

2.4結果展示
ok

+--------------+----------------+--+

| name | category_name |

+--------------+----------------+--+

| 《疑犯追蹤》 | 懸疑 |

| 《疑犯追蹤》 | 動作 |

| 《疑犯追蹤》 | 科幻 |

| 《疑犯追蹤》 | 劇情 |

| 《lie to me》 | 懸疑 |

| 《lie to me》 | 警匪 |

| 《lie to me》 | 動作 |

| 《lie to me》 | 心理 |

| 《lie to me》 | 劇情 |

| 《戰狼2》 | 戰爭 |

| 《戰狼2》 | 動作 |

| 《戰狼2》 | 災難 |

+--------------+----------------+--+

12rows selected (

0.393 seconds)

0: jdbc:hive2://wxt01:10000>

本文參考www.51doit.cn

hive sql 行列轉換

對一張大表的每一行,後面加多種label值 其實就是笛卡爾積,舉例 select from dev.dev jiadian user yuge temp cross join select 0 as label union all select 1 as label union all select...

hivesql日期轉換

hivesql 日期轉換 2020 09 08 轉換為20200908 select from unixtime unix timestamp date sub current date,30 yyyy mm dd yyyymmdd select from unixtime 1564581347,y...

mysql行列轉換 mysql行列轉換

1.一維轉二維 上圖為成績表中資料,現希望將資料轉換為下圖。靜態 轉化為二維表後的列名及列數是確定不變的,本例中即course只有數學 語文 英語這三門課。select s name,max if course 數學 score,0 as 數學,max if course 語文 score,0 as...