Hive 行轉列 列轉行

2021-10-01 03:12:20 字數 3139 閱讀 3492

並不是真正意義上的行轉列、列轉行。

只是這樣叫的。

concat(stringa,stringb,stringc):返回輸入字串拼接後的結果,支援輸入任意多個字串

測試結果:

可以連線任意多個:

concat_ws(「分隔符」,stringa,stringb):是乙個特殊的concat(),第乙個引數是引數間的分隔符(或者說是拼接符),如果拼接福是null。返回值也是null。

需要注意的是,拼接的必須是字串,拼接資料庫表字段的時候,只能是字串型別才行。

測試結果:

collect_set(col):函式只接受基本資料型別,主要是將某欄位資料去重,整合成array型別。

測試結果:

單獨好像沒啥用,可以concat_ws和collect_set聯用。

表資料:

name

constellation

blood_type

八戒白羊座a猴哥

射手座a

鬆鬆白羊座

b豬八戒

白羊座a

鳳姐射手座

a需要得到的結果:

射手座,a 猴哥|鳳姐

白羊座,a 八戒|豬八戒

白羊座,b 鬆鬆

先存入hdfs檔案中

vim person.txt

八戒 白羊座 a

猴哥 射手座 a

鬆鬆 白羊座 b

豬八戒 白羊座 a

鳳姐 射手座 a

建立hive表並匯入資料

create

table person_info(

name string,

xingzuo string,

blood_type string)

row format delimited fields

terminated

by"\t"

;load

data

local inpath '/opt/module/datas/person.txt'

into

table person_info;

按需求查詢

先將第一列合併,得到乙個中間結果

接著得到最終結果:

注意:collect_set()是個聚合函式,需要和group by一同使用

直接根據案例來學習兩個函式:

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

英文意思:**

lateral view

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

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

資料準備:

movie

category

《福爾摩斯》

懸疑,動作,科幻,劇情

《無間道》

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

《紅海行動》

戰爭,動作,災難

需求

《福爾摩斯》 懸疑

《福爾摩斯》 動作

《福爾摩斯》 科幻

《福爾摩斯》 劇情

《無間道》 懸疑

《無間道》 警匪

《無間道》 動作

《無間道》 心理

《無間道》 劇情

《紅海行動》 戰爭

《紅海行動》 動作

《紅海行動》 災難

hdfs上建立檔案

vi movie.txt

《福爾摩斯》 懸疑,動作,科幻,劇情

《無間道》 懸疑,警匪,動作,心理,劇情

《紅海行動》 戰爭,動作,災難

建立hive表並匯入

create

table movie_info(

movie string,

category array

)row format delimited fields

terminated

by"\t"

collection items terminated

by","

;load

data

local inpath "/opt/module/datas/movie.txt"

into

table movie_info;

先測試explode**函式:

得到結果:

然後再按需求查:

select

movie,

category_name

from

movie_info lateral view explode(category) table_tmp as category_name;

即可得到結果。

Hive行轉列,列轉行

下面舉兩個例子 例一 行轉列 資料 a b 1 a c 2 a b 3 c d 4 c d 5 c d 6 轉化為 a b 1,2,3 c d 4,5,6 創表hive create table test1 col1 string,col2 string,col3 string row format...

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

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

hive 列轉行和行轉列

1.假設我們在hive中有兩張表,其中一張表是存使用者基本資訊,另一張表是存使用者的位址資訊等,表資料假設如下 user basic info id name1a 2b3c 4duser address name address aadd1 aadd2 badd3 cadd4 dadd5 id na...