0
点赞
收藏
分享

微信扫一扫

hive高频使用的拼接函数及“避坑”

hive高频使用的拼接函数及“避坑”

说到拼接函数应用场景和使用频次还是非常高,比如一个员工在公司充当多个角色,我们在底层存数的时候往往是多行,但是应用的时候我们通常会只需要一行,角色字段进行拼接,这样join其他表的时候呢也不会造成数据被重复引用计算。

hive高频使用的拼接函数及“避坑”_字符串

1、拼接多个字符串concat_null(......)

hive高频使用的拼接函数及“避坑”_字段名_02

从上图中的说明中我们可以看到,在应用场景中,通常使用concat_null(......)防止由于有null存在导致的拼接异常。

2. 用分隔符拼接多个字符串concat_ws(......)

hive高频使用的拼接函数及“避坑”_字段名_03

需要注意的是concat_ws(......)可以直接处理掉null,而且如果将sep分割符使用''(空值),则功能和concat_null(......)一样。

3、collect_set、collect_list实现列转行

hive高频使用的拼接函数及“避坑”_字段_04

由于collect_set在实现列转行的时候进行了去重处理,自然实际应用中应用的也会更多。

4、"避坑" null和非字符串字段

由于在实际生产环境中,我们所使用的引擎有所不同,兼容性也不同。有时候NULL和非字符串字段在查询时也会出现问题。

1、通常我们可以把null进行替换。if(字段名 is null,'',字段名)

2、非字符串转化为字符串 cast(字段名 as string)

SELECT  id,
  concat_ws(',',collect_set(
      cast(if(角色 is null,'',角色) as string)
      )) AS `角色`     
  -- 将每个id对应多个的角色去重组合放到一行,并使用英文','分隔角色
FROM emp
WHERE dt = '20230618'
GROUP BY 1



举报

相关推荐

0 条评论