當某一維度或多維度組合下出現多行資料,如何將其聚合至一行進行儲存?
表名:tbl_student_score
字段:stu_id:學號;stu_name:姓名;subject:學科;score:分數;
學號姓名
學科分數
1001
張三數學
991001
張三語文
601001
張三英語
701002
李四數學
1001002
李四語文
991002
李四英語
981003
王五數學
951003
王五語文
801003
王五英語
99最終結果展示:
學號姓名
學科分數
1001
張三數學,語文,英語
99,60,70
1002
李四數學,語文,英語
100,99,98
1003
王五數學,語文,英語
95,80,99
select
stu_id,
stu_name,
concat_ws(',', collect_set(subject)) as subject,
concat_ws(',', collect_set(score)) as score
from tbl_student_score
group by
stu_id,
stu_name;
select
stu_id,
stu_name,
concat_ws(',', collect_list(subject)) as subject,
concat_ws(',', collect_list(score)) as score
from tbl_student_score
group by
stu_id,
stu_name;
函式用法
返回結果型別
作用collect_set
collect_set(column)
array
收集 group by 聚合字段,返回去重後陣列(集合)
concat_ws
concat_ws(separator, columna, columnb,…)
string
以指定分隔符(separator)連線多個字串
collect_list
collect_list(column)
array
收集 group by 聚合字段,返回不去重後陣列(集合)
當某一行資料中的某一列或某些列資料聚合多個資料,如何將其拆解並分行儲存?
表名:tbl_student_score_collect
字段:stu_id:學號;stu_name:姓名;subject:學科;score:分數;
學號姓名
學科分數
1001
張三數學,語文,英語
99,60,70
1002
李四數學,語文,英語
100,99,98
1003
王五數學,語文,英語
95,80,99
最終結果展示:
結果1:
學號姓名
學科1001
張三數學
1001
張三語文
1001
張三英語
1002
李四數學
1002
李四語文
1002
李四英語
1003
王五數學
1003
王五語文
1003
王五英語
結果2:
學號姓名
學科分數
1001
張三數學
991001
張三語文
601001
張三英語
701002
李四數學
1001002
李四語文
991002
李四英語
981003
王五數學
951003
王五語文
801003
王五英語
99
select
stu_id,
stu_name,
subject_explode
from tbl_student_score_collect
lateral view explode(split(subject,',')) sbj as subject_explode;
select
stu_id,
stu_name,
subject_explode,
score_explode
from tbl_student_score_collect
lateral view po***plode(split(subject,',')) sbj as pos, subject_explode
lateral view po***plode(split(socre,',')) sc as pos, score_explode
where sbj.pos = sc.pos;
函式用法
返回結果型別
作用explode
explode(array)
string
將列中複雜的array資料拆分成多行元素
po***plode
po***plode(array)
string
將列中複雜的array資料拆分成多行元素,同時返回元素在資料中的索引位置
基本描述:
lateral view一般與udtf(使用者自定義生成函式)結合使用,如,explode(),split();將udtf應用於表中的每一行,然後將結果輸出行連線到輸入行,以形成具有提供表別名的虛擬表。
基本語法:
select
***,
***x,
columnalias
from tbl_name
lateral view udtf(expression) tablealias as columnalias (',' columnalias)*
hive行列互轉
先說行轉列是什麼意思啊,假設有這樣的資料,uid表示使用者,time表示時刻,event表示使用者這個時刻在幹什麼,我們儲存到資料庫中就是這樣的 uidtime event a09 01 00睜眼a 09 02 00 找手機a 09 03 00發呆a 09 04 00洗臉a 09 05 00刷牙a ...
sql 行列互轉
1 行轉列 現有資料 期望資料 1.1建表建資料 if object id temp 20170701 u is not null drop table temp 20170701 create table temp 20170701 id int primary key identity 1,1 ...
Hive 行列轉換
在京東眾多業務中,業務充滿了複雜性和挑戰性,因為業務的靈活性,很多資料都儲存成xml和json格式資料,這就要求下游資料分析師們需要對其做解析後方可使用 在眾多操作中 有一種是需要對資料做行列轉換操作。資料結構 create external table jd row to column jd id...