Hive_行轉列(多行轉一個集合/數組)


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

鳳姐

射手座

A


3. 需求

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

射手座,A            大海|鳳姐

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

白羊座,B            宋宋

4. 創建本地constellation.txt,導入數據

[hadoop@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. 按需求查詢數據

select 
    t.base
    CONCAT_WS("|",COLLECT_SET(t.name)) as name
from
   (select 
        name,
        concat(constellation,',',blood_type) as base
    from 
        person_info;) t
group by 
    t.base;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM