hive的concat()、concat_ws()和collect_list()、collect_set()的用法

这篇具有很好参考价值的文章主要介绍了hive的concat()、concat_ws()和collect_list()、collect_set()的用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

concat和concat_ws

concat():函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL。

执行代码:
select concat('a','b',null);
 
执行结果:
NULL

concat_ws():函数在连接字符串的时候,只要有一个字符串不是NULL,就不会返回NULL。concat_ws():函数需要指定分隔符。

执行代码1select concat_ws('-','a','b');
执行结果:
a-b
 
执行代码2select concat_ws('-','a','b',null);
执行结果:
a-b
 
执行代码3select concat_ws('','a','b',null);
执行结果:
ab

collect_list和collect_set

他们都是将分组中的某列转为一个数组返回,不同的是collect_list不去重,而collect_set去重。
最终的返回值:

(1)collect_list():有序不去重
(2)collect_set():无序去重

原始数据:

hive的concat()、concat_ws()和collect_list()、collect_set()的用法,hive,hive,sql,数据库
collect_set示例代码:

select
  t.id,
  concat_ws(',', collect_set(t.class))
from
  temp t
group by
  t.id

实际结果:

hive的concat()、concat_ws()和collect_list()、collect_set()的用法,hive,hive,sql,数据库

可以发现,collect_set合并后并不是有序。

collect_list示例代码:

select
  t.id,
  concat_ws(',', collect_list(t.class))
from
  temp t
group by
  t.id

实际结果:
hive的concat()、concat_ws()和collect_list()、collect_set()的用法,hive,hive,sql,数据库
collect_list合并后有序。

在spark_sql中,将collect_list的类型转化为string,只需要使用cast函数,但是在离线平台中,是不支持Array转化为string,所以需要借助:concat_ws。

在聚合字段时,查询时将collect_list前使用concat_ws函数,这样该字段就转化为string了。

concat_ws(',', collect_list(t.class))

若是想使用collect_set使结果有序,可以采用:

select
  t.id,
  concat_ws(',', sort_array(collect_set(t.class), false))
from
  temp t
group by
  t.id

sort_array(e: column, asc: boolean)将array中元素排序(自然排序),默认asc。

实际结果:

hive的concat()、concat_ws()和collect_list()、collect_set()的用法,hive,hive,sql,数据库文章来源地址https://www.toymoban.com/news/detail-759622.html

到了这里,关于hive的concat()、concat_ws()和collect_list()、collect_set()的用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Mysql] CONCAT函数 | CONCAT_WS函数

    CONCAT函数 格式: SELECT CONCAT(str1,str2,...)  FROM [表名]; 将多个字段拼接为一个字段 ( 字符串 str1,str2 等多个字符串合并为一个字符串,多个字符串之间用 逗号 分隔 ) 可以有很多个参数,如果参数有一个是NULL,则结果返回NULL( 使用CONCAT()函数对包含NULL的数据进行拼接时,结果为

    2023年04月08日
    浏览(114)
  • 【Spark】concat、concat_ws函数的使用

    目录 前言/简介 实践应用 1、concat()函数 2、concat_ws()函数         在使用Spark-hive技术处理逻辑时,经常会使用concat()、和concat_ws()字符串连接函数。这两个函数在spark的用户自定义函数和hive的用户自定义函数中都存在,Spark也是支持hive用户自定义函数的。两者主要使用区别

    2024年02月15日
    浏览(85)
  • MySQL函数:列转行CONCAT、CONCAT_WS、GROUP_CONCAT的使用(精要)

    很久没有接触Mysql了。 今天心血来潮,突然想了解一下Mysql列转行,看了一些文章,重点不清晰,遂有下文! Mysql官网、 社区版下载( Windows版_mysql.8.0.31下载  ) Mysql内部提供了列转行的三个函数,分别是: CONCAT( str1,str2,... ) CONCAT_WS( separator,str1,str2,... ) GROUP_CONCAT( expr ) 数

    2024年02月05日
    浏览(40)
  • Spark SQL自定义collect_list分组排序

    想要在spark sql中对group by + concat_ws()的字段进行排序,可以参考如下方法。 原始数据如下: 目标数据如下: spark-shell: 1.使用开窗函数 因为使用开窗函数本身会使用比较多的资源, 这种方式在大数据量下性能会比较慢,所以尝试下面的操作。 2.使用struct和sort_array(array,asc?tru

    2024年02月01日
    浏览(39)
  • Hive-concat_ws 详解

    concat_ws  是 Hive 中的一个函数,用于在给定分隔符的情况下连接字符串数组或字符串。它的语法如下: 参数说明: separator : 分隔符,用于连接字符串。可以是任何有效的字符串。 const1, const2, const3, ... : 要连接的字符串或字符串数组。 该函数将使用指定的分隔符将所有提供的

    2024年02月04日
    浏览(45)
  • 今天又get到一个小技能,collect_set函数

    collect_set函数 今天又get到一个小技能,掌握了hive一个关于列转行专用函数 collect_set函数。 在这里做个学习笔记。 collect_set是Hive内置的一个聚合函数, 结果返回一个消除了重复元素的对象集合, 其返回值类型是 array 。 和collect_set相似的还有另一个函数collect_list,这个我们后面

    2023年04月17日
    浏览(39)
  • HIVE SQL实现分组字符串拼接concat

    在Mysql中可以通过 group_concat() 函数实现分组字符串拼接,在HIVE SQL中可以使用 concat_ws()+collect_set()/collect_list() 函数实现相同的效果。 实例: a b c 2014 B 9 2015 A 8 2014 A 10 2015 B 7 2014 B 6 1.concat_ws+collect_list 非去重拼接 查询结果: a col_b col_c 2014 B-A-B 9-10-6 2015 A-B 8-7 2.concat_ws+collect_se

    2024年02月12日
    浏览(44)
  • 容器——2.Collection 子接口之 List

    ArrayList 是 List 的主要实现类,底层使用 Object[ ] 存储,适用于频繁的查找工作,线程不安全 ; Vector 是 List 的古老实现类,底层使用 Object[ ] 存储,线程安全的。 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全; 底层数据结构: Arraylist 底层使

    2024年02月14日
    浏览(38)
  • Collections工具类,可以使用collections工具类对代码中的list进行分组

    当我们需要对代码list进行分组的时候,有时候使用for循环会显得很蠢,那么使用Colletions工具类就会很方便,根据所需要的分类值,进行映射分组集合,以上是案例 toMap 返回map集合 MapLong, ListLong toList 返回list集合 tips stream流一样好用

    2024年03月23日
    浏览(35)
  • 第12章_集合框架(Collection接口,Iterator接口,List,Set,Map,Collections工具类)

    1.1 生活中的容器 1.2 数组的特点与弊端 一方面,面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。 另一方面,使用数组存储对象方面具有 一些弊端 ,而Java 集合就像一种容器,可以 动态地 把多个对象的引用放入容器中。 数

    2024年01月25日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包