ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Hive学习笔记:列转行之collect_list/collect_set/concat_ws

2022-01-11 23:03:24  阅读:242  来源: 互联网

标签:set list collect ws table id concat


一、介绍

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

它们都是将分组中的某列转为一个数组返回,其中区别在于:

  • collect_list -- 不去重
  • collect_set -- 去重

有点类似于 Python 中的列表、集合。

二、实操

1.创建测试表

create table table_tmp(
    id string,
    classes string
) partitioned by (month string)
row format delimited fields terminated by ',';

2.本地文件

1,a
1,b
2,a
2,b
2,a
2,c
3,a
3,c

3.数据加载Hive表

load data local inpath '/root/data/id.data' into table table_tmp partition (month='202201');

4.分组

select id,
       collect_list(classes) as col_001
from table_tmp
group by id;

5.concat_ws + collect_list 实现不去重合并

select id,
       concat_ws('-', collect_list(cast(col_001 as string))) as col_concat
from table_tmp
group by id;

6.concat_ws + collect_set 实现去重合并

select id,
       concat_ws('-', collect_set(cast(col_001 as string))) as col_concat
from table_tmp
group by id;

三、其他

1.突破group by限制

可以利用 collect 突破 group by 的限制,分组查询的时候要求出现在 select 后面的列都必须是分组的列。

但有时候我们想根据某列进行分组后,随机抽取另一列中的一个值,即可通过以下实现:

select id
       collect_list(classes)[0] as col_001
from table_tmp
group by id;

有种类似于 Python 中索引切片的感觉。

2.concat_ws语法

concat_ws(separator, str1, str2, ...)
concat_ws(separator, [str1, str2, ...])

参考链接:hive中对多行进行合并—collect_set&collect_list函数

参考链接:Hive笔记之collect_list/collect_set(列转行)

标签:set,list,collect,ws,table,id,concat
来源: https://www.cnblogs.com/hider/p/15790494.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有