当前位置: 首页 > news >正文

【hive】列转行—collect_set()/collect_list()/concat_ws()函数的使用场景

文章目录

  • 一、collect_set()/collect_list():
  • 二、实际运用
    • 1、创建测试表及插入数据 :
    • 举例1:按照id,cur_day分组,取出每个id对应的所有rule(不去重)。
    • 举例2:按照id,cur_day分组,取出每个id对应的所有rule(去重)。
  • 总结


一、collect_set()/collect_list():

在 Hive 中想实现按某字段分组,对另外字段进行合并,可通过collect_list()或者collect_set()实现。

  • collect_set()函数与collect_list()函数:列转行专用函数,都是将分组中的某列转为一个数组返回。有时为了字段拼接效果,多和concat_ws()函数连用。

  • collect_set()与collect_list()的区别:

collect_list()函数 - - 不去重
collect_set()函数 - - 去重

二、实际运用

1、创建测试表及插入数据 :

drop table test_1;
create table test_1(
id string,
cur_day string,
rule string
) 
row format delimited fields terminated by ',';insert into test_1 values
('a','20230809','501'),('a','20230811','502'),('a','20230812','503'),('a','20230812','501'),('a','20230813','512'),('b','20230809','511'),('b','20230811','512'),('b','20230812','513'),('b','20230812','511'),('b','20230813','512'),('b','20230809','511'),('c','20230811','512'),('c','20230812','513'),('c','20230812','511'),('c','20230813','512');

把同一分组的不同行的数据聚合成一个行

举例1:按照id,cur_day分组,取出每个id对应的所有rule(不去重)。

select id,cur_day,collect_list(rule) as rule_total  from test_1 group by id,cur_day order by id,cur_day;

在这里插入图片描述

举例2:按照id,cur_day分组,取出每个id对应的所有rule(去重)。

select id,cur_day,collect_set(rule) as rule_total from test_1 group by id,cur_day order by id,cur_day;

set去重

  • 用下标可以随机取某一个
select id,cur_day,collect_list(rule)[0] as rule_one from test_1 group by id,cur_day order by id,cur_day;select id,cur_day,collect_set(rule)[0] as rule_one from test_1 group by id,cur_day order by id,cur_day;

在这里插入图片描述

  • 聚合后的中的值用‘|’分隔开
select id,cur_day,concat_ws('|',collect_list(rule)) as rule_total from test_1 group by id,cur_day order by id,cur_day;select id,cur_day,concat_ws('|',collect_set(rule)) as rule_total from test_1 group by id,cur_day order by id,cur_day;

在这里插入图片描述

  • 例子
  • spark-sql : COLLECT_LIST里边字段起别名.(as等其他方式都用过,都报错.
    最后用子查询来解决)
SELECT fenceCode,COLLECT_LIST(STRUCT(vehicleNo, plateColor, enterTime, levaeTime, trans)) AS actInfos
FROM (SELECT fence_code AS fenceCode,veh_no AS vehicleNo,veh_color AS plateColor,enter_time AS enterTime,out_time AS levaeTime,transFROM mid.ct_fence_into_out_dt where dt = 20230911  
) subquery
GROUP BY fenceCode;

总结

如果此篇文章有帮助到您, 希望打大佬们能关注点赞收藏评论支持一波,非常感谢大家!
如果有不对的地方请指正!!!

参考1

相关文章:

  • 2.多行输入【2023.11.24】
  • 【数据结构】二叉树概念 | 满二叉树 | 完全二叉树
  • redis的一些操作
  • Servlet+JSP小型超市管理系统
  • 卷积神经网络(CNN)识别验证码
  • 野指针详解
  • Oracle中文显示???????解决办法
  • 为什么 Flink 抛弃了 Scala
  • 2023年P气瓶充装证模拟考试题库及P气瓶充装理论考试试题
  • C++:一文读懂智能指针
  • js修改浏览器地址栏里url的方法
  • python -opencv 中值滤波 ,均值滤波,高斯滤波实战
  • 汽车电子 -- 根据DBC解析CAN报文
  • 电力感知边缘计算网关产品设计方案-网关系统通信架构方案
  • 生产环境出现问题,测试人如何做工作复盘?
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • FastReport在线报表设计器工作原理
  • HTML5新特性总结
  • IDEA常用插件整理
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Mysql数据库的条件查询语句
  • Vue2.0 实现互斥
  • 翻译:Hystrix - How To Use
  • 分享一份非常强势的Android面试题
  • 构建工具 - 收藏集 - 掘金
  • 前端面试之闭包
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (floyd+补集) poj 3275
  • (层次遍历)104. 二叉树的最大深度
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (六)Hibernate的二级缓存
  • (三)Honghu Cloud云架构一定时调度平台
  • (转) Android中ViewStub组件使用
  • (转)大型网站架构演变和知识体系
  • .Net Memory Profiler的使用举例
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET导入Excel数据
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • /var/spool/postfix/maildrop 下有大量文件
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • @取消转义
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [DL]深度学习_Feature Pyramid Network
  • [HEOI2013]ALO
  • [HNOI2008]玩具装箱toy
  • [HOW TO]怎么在iPhone程序中实现可多选可搜索按字母排序的联系人选择器
  • [IDF]啥?
  • [linux]--关于进程概念(上)
  • [nlp] tokenizer
  • [oeasy]python0002_终端_CLI_GUI_编程环境_游戏_真实_元宇宙
  • [Python]`threading.local`创建线程本地数据