hive字段拼接

hive工作中用到的一些拼接函数

  1. concat(string s1, string s2, string s3)
    这个函数能够把字符串类型的数据连接起来,连接的某个元素可以是列值。
    如 concat( aa, ‘:’, bb) 就相当于把aa列和bb列用冒号连接起来了,aa:bb。
  2. cast
    用法:cast(value as type)
    功能:将某个列的值显示的转化为某个类型
    例子:cast(age as string ) 将int类型的数据转化为了String类型
  3. concat_ws(seperator, string s1, string s2…)
    功能:制定分隔符将多个字符串连接起来,实现“列转行”
    例子:常常结合group by与collect_set使用
    select a, b, concat_ws(’,’ , collect_set(cast(c as string)))
    from table group by a,b;
    有表结构a string , b string , c int
    concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL,select concat(‘a’,‘b’);
    concat_ws函数在连接字符串的时候,只要有一个字符串不是NULL,就不会返回NULL。concat_ws函数需要指定分隔符。
    select concat_ws(’-’,‘a’,‘b’);

说明:collect_list 不去重,collect_set 去重。 column的数据类型要求是string
concat_ws和collect_set()函数实现(对某列进行去重)
concat_ws和collect_list()函数实现(对某列不进行去重)
使用函数:concat_ws(’,’,collect_set(column))
collect_set 函数,有两个作用,
第一个是去重,去除group by后的重复元素,
第二个是形成一个集合,将group by后属于同一组的集合起来成为一个集合。与contact_ws结合使用就是将这些元素以逗号分隔形成字符串。

https://www.cnblogs.com/blogyuhan/p/9274784.html

–都放在一行

SELECT person_code ,
concat_ws("\n",collect_list(
concat_ws(" ",work_date,dpt_path_name,position_name)
) ) AS work_ex
FROM dw.dw_hr_empl_work_exp_f
WHERE person_code = ‘00006’
GROUP BY person_code

–放在一列
SELECT a.person_code ,work_ex_1 FROM(
SELECT person_code ,
concat(concat_ws( ‘,’,
collect_list(
concat(
work_date,’ ‘,
dpt_path_name,’ ',
position_name
)
)
)

          ) AS work_ex
          
          FROM  dw.dw_hr_empl_work_exp_f         
          GROUP BY person_code

) a
lateral view explode(split(a.work_ex,’,’)) num as work_ex_1
WHERE a.person_code = ‘00006’
GROUP BY a.person_code,work_ex_1

–奖励情况 /
SELECT * FROM dw.dw_hr_empl_reward_punish_f
–多行变成同一行
select person_code,
concat_ws(’,’,collect_list(subject)) as order_value
from dw.dw_hr_empl_reward_punish_f
group by person_code

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值