hive中的多行多列轉換

2021-10-24 15:13:33 字數 1915 閱讀 6016

**:

1. 多行轉多列

原表test表儲存格式如下,希望進行優化

name

subject

score

張三語文

90張三

數學85

張三英語

92李四

語文75

李四數學

90李四

英語80

王五語文

95王五

數學100

王五英語98

name

chinese

math

english

張三90

8592

李四75

9080

王五95

10098

方法一:利用str_to_map函式

select name

,info['語文'] as chinese

,info['數學'] as math

,info['英語'] as english

from (select name,str_to_map(concat_ws(',',collect_set(concat_ws(':',subject,cast(score as string))))) as info

from test

group by name

) a

方法二:利用case when函式

select name

,max(case when subject = '語文' then score else 0 end) as chinese

,max(case when subject = '數學' then score else 0 end) as math

,max(case when subject = '英語' then score else 0 end) as english

from test

group by name

2. 多列轉多行在資料視覺化時如果表很寬很短會顯得不那麼好看,這個時候可以將資料轉成瘦長的格式

date

uvnewuv

video

newvideo

vvvip_num

new_vip_num

2019-05-10

5000000

200000

3000000

10000

20000000

500000

80000

date

label

value

2019-05-10

uv5000000

2019-05-10

新增uv

200000

2019-05-10

3000000

2019-05-10

10000

2019-05-10

20000000

2019-05-10

會員數500000

2019-05-10

新增會員數

80000

實現方法:

select a.date

,b.label

,b.value

from (select *

from daily_report

) a

lateral view explode (map(

'uv', uv

,'新增uv', newuv

,'會員數', vip_num

,'新增會員數', new_vip_num

)) b as label, value

hive多行轉多列

一 需求 需要將多行的資料,按照某個維度轉換為一行。轉換前 轉換後 db price area name 為 東北 的total price actual db qty area name 為 東北 的qty。二 解決方案 1 sql select brand,max case when area ...

行列轉換之 多行轉多列,多列轉多行實踐版

行列轉換之 多行轉多列,多列轉多行實踐版 參考 深入行列轉換 多行轉多列,多行的計算 參考 sql server動態行列轉換 要求 實操演示 1.全表 select from temp2 2.構造row number select row number over partition by a ord...

hive 相同key 多行多列合併 處理

在join 的過程中我們很容易出現資料膨脹現象,即一行變成多 況。面對這種情況,一般會有兩種處理方式 第一種 用row number 等分窗函式,根據不同策略取不同行的資料 第二種 將相同key對應多行的情況合併成一行,如果一行有多個字段,還有可能合併為乙個欄位中 如源表結構 pcgid strin...