Hive函式07 行轉列 列轉行函式

2021-10-05 05:30:00 字數 3588 閱讀 6394

concat(string a/col, string b/col )

返回輸入字串連線後的結果,支援任意個輸入字串

concat_ws(separator, str1, str2,...):

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

collect_set(col):

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

1.資料準備

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

射手座,a 大海| 鳳姐

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

白羊座,b 宋宋

3.建立本地person_info.txt,匯入資料

# vi /data/test/person_info.txt

孫悟空 白羊座 a

大海 射手座 a

宋宋 白羊座 b

豬八戒 白羊座 a

鳳姐 射手座 a

注意: 資料之間要使用 tab鍵隔開,否則後面插入資料有問題檢視檔案許可權,許可權不夠chmod 777 person_info.txt4.建立 hive 表並匯入資料

--建立表

create

table person_info(

name string,

constellation string,

blood_type string)

row format delimited fields

terminated

by"\t"

;-- 載入資料(這裡採用第一種)

--追加式匯入

load

data

local inpath "/data/test/person_info.txt"

into

table person_info

-- 更新式匯入

5.按需求查詢資料

函式說明:

concat(string a/col, string b/col )

返回輸入字串連線後的結果,支援任意個輸入字串

concat_ws(separator, str1, str2,...):

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

collect_set(col):

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

1.資料準備

movie

category

《疑犯追蹤》

懸疑,動作,科幻,劇情

《lie to me》

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

《戰狼2》

戰爭,動作,災難

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

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

# vi movie.txt

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

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

《戰狼2 》 戰爭 動作 災難

檢視檔案許可權,許可權不夠chmod 777 movie.txt4.建立 hive 表並匯入資料

-- 建立電影資訊表

create

table movie_info(

movie string,

category array

)row format delimited fields

terminated

by"\t"

collection items terminated

by","

;-- 載入本地資料到hive

5.按需求查詢資料

select

movie,

category_name

from

movie_info lateral view explode(category) table_tmp as category_name;

函式說明:

lateral view:

用法

lateral view udtf(expression) tablealias as columnalias
用於和 split, explode 等 udtf 一起使用,它能夠將一列資料拆成多行資料,在此基礎上可以對拆分後的資料進行聚合。

explode(col):

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

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 行轉列 列轉行

並不是真正意義上的行轉列 列轉行。只是這樣叫的。concat stringa,stringb,stringc 返回輸入字串拼接後的結果,支援輸入任意多個字串 測試結果 可以連線任意多個 concat ws 分隔符 stringa,stringb 是乙個特殊的concat 第乙個引數是引數間的分隔符 ...

函式 Hive 行轉列 和 列轉行

在hive實際開發過程中,我們會遇到 行轉列 和 列轉行 的場景。比如 1 需要取 訂單號 對應的所有商品 sku號 商品 sku號 放在一列,即從table1查詢出table2 2 當商品 sku號 均在一列的時候,需要查詢每個 sku號 對應的 訂單號 即從table2查詢出table1。實現方...