十一 行轉列 列轉行函式

2021-10-06 12:06:31 字數 2633 閱讀 4421

1、相關行數

concat(string a/col, string b/col…):返回輸入字串連線後的結果,支援任意個輸入字串;

concat_ws(separator, str1, str2,…):它是乙個特殊形式的 concat()。第乙個引數剩餘引數間的分隔符。分隔符可以是與剩餘引數一樣的字串。如果分隔符是 null,返回值也將為 null。這個函式會跳過分隔符引數後的任何 null 和空字串。分隔符將被加到被連線的字串之間;

collect_set(col):函式只接受基本資料型別,它的主要作用是將某字段的值進行去重彙總,產生array型別字段。

2、資料準備

資料

[root@hadoop102 datas]$ vi person.txt

孫悟空 白羊座 a

大海 射手座 a

宋宋 白羊座 b

豬八戒 白羊座 a

鳳姐 射手座 a

建表create table person_info(

name string,

constellation string,

blood_type string)

row format delimited fields terminated by "\t";

匯入資料

load data local inpath '/opt/module/datas/person.txt' into table person_info;

3、concat函式使用
hive (default)> select name,concat(constellation,',',blood_type) hb from person_info;

okname hb

孫悟空 白羊座,a

大海 射手座,a

宋宋 白羊座,b

豬八戒 白羊座,a

鳳姐 射手座,a

4、collect_set 資料列去重聚合
select hb,collect_set(name) names 

from (

select name,concat(constellation,',',blood_type) hb from person_info

) t

group by t.hb;

hb names

射手座,a ["大海","鳳姐"]

白羊座,a ["孫悟空","豬八戒"]

白羊座,b ["宋宋"]

5、concat_ws 將arr陣列列合併為字串
select hb,concat_ws('|',collect_set(name)) namestr

from (

select name,concat(constellation,',',blood_type) hb from person_info

) t

group by t.hb;

hb namestr

射手座,a 大海|鳳姐

白羊座,a 孫悟空|豬八戒

白羊座,b 宋宋

1、函式說明

explode(col):將hive一列中複雜的array或者map結構拆分成多行。

lateral view用法:lateral view udtf(expression) tablealias as columnalias

解釋:用於和split, explode等udtf一起使用,它能夠將一列資料拆成多行資料,在此基礎上可以對拆分後的資料進行聚合。

2、資料準備

將前面資料聚合行函式sql,新建表

create table test2 as

select hb,collect_set(name) names

from (

select name,concat(constellation,',',blood_type) hb from person_info

) t

group by t.hb;

#資料檢視

hive (default)> select hb,names from test2;

okhb names

射手座,a ["大海","鳳姐"]

白羊座,a ["孫悟空","豬八戒"]

白羊座,b ["宋宋"]

3、將names資料炸裂開變為行
hive (default)> select hb,name from test2 lateral view explode(names) table_tmp as name;

okhb name

射手座,a 大海

射手座,a 鳳姐

白羊座,a 孫悟空

白羊座,a 豬八戒

白羊座,b 宋宋

列轉行 行轉列

問題 使用case when實現行轉列 解決 1 測試準備 create table studentscores username nvarchar2 20 學生姓名 subject nvarchar2 30 科目 score float 成績 2 準備資料 insert into students...

行轉列 列轉行

行轉列 select t.t.rowid from test1 t id c1 c2 c3 1 小紅 數學 10 2 小紅 語文 20 3 小欄 數學 15 4 小欄 語文 25 test1 oracle select c1,to char wm concat c2 c2 from test1 gr...

hive 列轉行 HQL 行轉列,列轉行

1 相關函式 concat string a col,string b col 返回輸入字串連線後的結果,支援任意個輸入字串 concat ws separator,str1,str2,它是乙個特殊形式的 concat 第乙個引數剩餘引數間的分隔符。分隔符可以是與剩餘引數一樣的字串。如果分隔符是 n...