hive 行轉列和列轉行(筆記)

2021-10-03 06:41:46 字數 2787 閱讀 6979

1.相關函式說明

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

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

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

2.資料準備

表6-6 資料準備

name

constellation

blood_type

孫悟空白羊座a大海

射手座a

宋宋白羊座

b豬八戒

白羊座a

鳳姐射手座

a3.需求

把星座和血型一樣的人歸類到一起。結果如下:

射手座,a            大海|鳳姐

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

白羊座,b            宋宋

4.建立本地constellation.txt,匯入資料

[atguigu@hadoop102 datas]$ vi constellation.txt

孫悟空 白羊座 a

大海      射手座 a

宋宋      白羊座 b

豬八戒    白羊座 a

鳳姐      射手座 a

5.建立hive表並匯入資料

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/constellation.txt" into table person_info;

6.按需求查詢資料

1.函式說明

explode(col):

將hive一

列中複雜的array或者map結構拆分成多行。

lateral view

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

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

2.資料準備

表6-7 資料準備

movie

category

《疑犯追蹤》

懸疑,動作,科幻,劇情

《lie to me》

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

《戰狼2》

戰爭,動作,災難

3.需求

將電影分類中的陣列資料展開。結果如下:

《疑犯追蹤》      懸疑

《疑犯追蹤》      動作

《疑犯追蹤》      科幻

《疑犯追蹤》      劇情

《lie to me》   懸疑

《lie to me》   警匪

《lie to me》   動作

《lie to me》   心理

《lie to me》   劇情

《戰狼2》        戰爭

《戰狼2》        動作

《戰狼2》        災難

4.建立本地movie.txt,匯入資料

[atguigu@hadoop102 datas]$ vi movie.txt

《疑犯追蹤》 懸疑,動作,科幻,劇情

《lie to me》 懸疑,警匪,動作,心理,劇情

《戰狼2》 戰爭,動作,災難

5.建立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;

6.按需求查詢資料

hive 列轉行和行轉列

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

hive 列轉行和行轉列

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

Hive行轉列和列轉行

優點 好理解 缺點 多次select同一張表,造成計算量成倍增加 冗餘,單個select條件複雜後會變得較難維護。concat height height,weight weight,age age as value select id,height as label,height as value...