hive中行转列

行转列的整体思路:列名和列值两列数据合并,根据需求提取数据转为列

concat() 拼接字符串

concat(str1,str2,str3,…)

select concat('a','b','c') ;

'abc'

连接参数的函数,返回结果为连接参数的字符串。如果有一个参数为NULL,则返回的结果为NULL。

select concat('a',null,'c');

null

多列合并成一列

select trade_id,concat(opt_type,'#',gmt_created) as opt_info  from ods_all_o2o_order;

trade_id  opt_info
13345     'seller_accepted#2022-01-01 20:57:33'
12378     'order_created#2022-01-23 10:23:01'

collect_set()把同一分组不同行的数据合并成一列

select trade_id,collect_set(opt_info) as info_set from test2 group by trade_id;

trade_id  info_set

13345     ['seller_accepted#2022-01-01 20:57:33','order_created#2021-12-27 20:32:34']
12378     ['order_created#2022-01-23 10:23:01']

concat_ws(separator, str1, str2, …)

separator为参数指定分隔符,分隔符不能为null,如果设置为null,则返回结果为null

concat_ws() 函数 1、一次性指定分隔符,多列(多个字段)合并成一列(合并成一个字段)

                             2、将列表转换为由指定分隔符分隔的字符串

select concat_ws('*','aili','123','youyou');

'aili*123*youyou'
select concat_ws(',',['seller1','seller2','seller3','seller4','seller5']);

'seller1,seller2,seller3,seller4,seller5'

str_to_map 将字符串拆分成键值对

str_to_map(字符串参数, 分隔符1, 分隔符2)

使用两个分隔符将文本拆分为键值对。

分隔符1将文本分成K-V对,分隔符2分割每个K-V对。对于分隔符1默认分隔符是 ',',对于分隔符2默认分隔符是 '='

select str_to_map('seller_accepted#2022-01-01,order_created#2021-12-31',',','#');

{"seller_acceped":"2022-01-01","order_created":"2021-12-31"}

nvl() 函数

空值转换函数

nvl格式的函数如下:

nvl(expr1, expr2)

备注:
1、如果expr1为NULL,返回值为 expr2,否则返回expr1。
2、适用于数字型、字符型和日期型,但是 expr1和expr2的数据类型必须为同类型。

你可能感兴趣的:(hive,hive,hadoop,数据仓库)