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...