hive 字串拼接 Hive行轉列詳解

2021-10-11 09:00:40 字數 2223 閱讀 3814

孫悟空 白羊座 a

沙悟淨 射手座 a

宋鬆鬆 白羊座 b

豬八戒 白羊座 a

小鳳姐 射手座 a

轉換成以下格式:

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

白羊座,b 宋鬆鬆

射手座,a 沙悟淨|小鳳姐

知識點:concat(string1,string2) string1和string2需要是列名

-- 使用hive的beeline客戶端,使用t_vehicle_log,並檢視該錶的secma

-- 對其中兩列字段進行拼接

select concat(vehicle_speed,vehicle_plate) from t_vehicle_log;

--concat()  對拼接的兩列字串中間用,連線

select concat(vehicle_speed,",",vehicle_plate) from t_vehicle_log;

加入我們要拼接多個列,並且需要用同樣的分隔符(如a,b,c,d),該怎麼做呢?

——我們可以使用concat_ws()

select concat_ws(",",monitor_id,camera_id,vehicle_plate) from t_vehicle_log;
如果某一列有很多重複的字段,我們需要對其進行去重,並對去重欄位返回乙個陣列,該怎麼辦呢?

—— 我們可以使用 collect_set()

select monitor_id from t_vehicle_log;

select collect_set(monitor_id) from t_vehicle_log;
以上為本次需求所需的知識點的講解,下面開始解決本次需求:

-- 建表:
使用concat_ws()查詢:

select concat_ws(",",constellation,blood_type) c_b,name from person_info;
結果:

select 

t1.c_b,

collect_set(t1.name)

from(

select concat_ws(",",constellation,blood_type) c_b,

name from person_info

) t1

group by t1.c_b;

最終結果:collect_set()返回的是陣列,concat_ws()接受的string或者是string陣列

將陣列劃分開:

select 

t1.c_b,

concat_ws("|",collect_set(t1.name))

from(

select concat_ws(",",constellation,blood_type) c_b,

name from person_info

) t1

group by t1.c_b;

結果:

到此,任務完成。我們下期再見。

乙個不務正業的技術博主

hive字串拼接常用方法

1.concat 實現把若干個字段 字段型別可不相同 資料拼接起來 用法 concat string a1,int a2,float a3 select concat aa 11,2.2 aa112.2 不同字段之間用分隔符連線 select concat aa 11,2.2 aa 11 2.2舉例...

hive 去重 字串 hive 函式

substr string a,int start,int len substring string a,intstart,int len 用法一樣,三個引數 返回值 string 說明 返回字串a從start位置開始,長度為len的字串,下標預設為1.若沒有長度預設到結尾。round round ...

Hive字串函式

字串函式 1.int ascii string str 返回第乙個字元的ascii碼值 demo select ascii abcde result 97 string 2.base64 binary bin 二進位制轉為base 64 3.int character length string s...