Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >hive sql(八)—— 根据聚合在一起的编码转换成聚合在一起的码值

hive sql(八)—— 根据聚合在一起的编码转换成聚合在一起的码值

作者头像
大数据最后一公里
发布于 2021-08-05 02:16:56
发布于 2021-08-05 02:16:56
81200
代码可运行
举报
运行总次数:0
代码可运行

需求

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
根据聚合在一起的编码转换成聚合在一起的码值

建表语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table wangyou1(
    codeStr string
)
row format delimited fields terminated by '\t'
;

数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
insert overwrite table wangyou1 values
("1,2,3,4"),
("1,2"),
("2,3"),
("2,3,4");

实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select
    t2.codeStr,
    concat_ws(",",collect_list(t2.codeValue))
from
    (select
        t1.codeStr,
        case t1.codeId
            when "1" then "原因1"
            when "2" then "原因2"
            when "3" then "原因3"
            when "4" then "原因4"
         end codeValue
    from
        (select
            codeStr,
            codeId
        from
            wangyou1
        lateral view explode(split(codeStr,",")) tmp as codeId
        )t1
    )t2
group by t2.codeStr
;

结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Total MapReduce CPU Time Spent: 4 seconds 180 msec
OK
t2.codestr  _c1
1,2  原因1,原因2
1,2,3,4  原因1,原因2,原因3,原因4
2,3  原因2,原因3
2,3,4  原因2,原因3,原因4
Time taken: 14.763 seconds, Fetched: 4 row(s)

分析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、这里需要将字符串1变成字符串2,hive并没有直接提供类似索引的
2、思路是切割字符串使之变成数组、使用炸裂函数行转列、case when
进行字符串转换、聚合函数实现列转行
3、如果字符串是固定的可以使用replace这种进行直接替换
4、这里的实现方式更适合通用型、不确定的,但是值比较固定

扩展

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--今天的扩展部分是使用map替换case when
--替换后的效果速度上比实现部分减少了130毫秒,代码行数减少了6行
select
    str_to_map('{"1":"原因1","2":"原因2","3":"原因3","4":"原因4"}')

select
    map("1","原因1","2","原因2","3","原因3","4","原因4")

select
    t2.codeStr,
    concat_ws(",",collect_list(t2.codeValue))
from
    (select
        t1.codeStr,
        map("1","原因1","2","原因2","3","原因3","4","原因4")[codeId] as codeValue
    from
        (select
            codeStr,
            codeId
        from
            wangyou1
        lateral view explode(split(codeStr,",")) tmp as codeId
        )t1
    )t2
group by t2.codeStr
;
Total MapReduce CPU Time Spent: 4 seconds 50 msec
OK
t2.codestr  _c1
1,2  原因1,原因2
1,2,3,4  原因1,原因2,原因3,原因4
2,3  原因2,原因3
2,3,4  原因2,原因3,原因4
Time taken: 14.648 seconds, Fetched: 4 row(s)

知识点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、split(字符串,分割符):使用分割符切割字符串,返回一个数组
2、lateral view explode(数组):将数组字段拆分成多行
3、concat_ws(连接符,字符串,字符串):连接多个字符串
4、collect_list(分组键):将分组中的某列聚合成一个数组,数组中元素与分组后的数据保持一致
5、map:将多个排列好的k,v,k,v...变成一个map结构,这是初始化map结构的方式,取数据是map[key]
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据最后一公里 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
最强最全面的大数据SQL面试题和答案(由31位大佬共同协作完成)
本套SQL题的答案是由许多大佬共同贡献,1+1的力量是远远大于2的,有不少题目都采用了非常巧妙的解法,也有不少题目有多种解法。本套大数据SQL题不仅题目丰富多样,答案更是精彩绝伦!
五分钟学大数据
2021/12/27
5.3K0
一文学完所有的Hive Sql(两万字最全详解)
lateral view用于和split、explode等UDTF一起使用的,能将一行数据拆分成多行数据,在此基础上可以对拆分的数据进行聚合,lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一行或者多行,lateral view在把结果组合,产生一个支持别名表的虚拟表。
五分钟学大数据
2021/04/02
3.3K0
hive sql系列(总结)
hive sql系列主打sql,通过案例,从实现到分析,帮助大家找到写sql的快乐
大数据最后一公里
2021/08/05
1.9K0
关于Hive使用的一些实例
它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间。
泰坦HW
2020/08/22
1.6K0
hive学习笔记之七:内置函数
如果您不想自己搭建kubernetes环境,推荐使用腾讯云容器服务TKE:无需自建,即可在腾讯云上使用稳定, 安全,高效,灵活扩展的 Kubernetes 容器平台;
程序员欣宸
2021/07/08
4090
hive学习笔记之七:内置函数
Hive函数
**CONCAT_WS(separator, str1, str2,...):**多字符串拼接
ha_lydms
2023/11/19
5731
Hive函数
hive排序后collect_set
首先排序:row_number() over (partition by category order by cast(duration as int) desc) duration_rank,然后拼接concat_ws(',',collect_set(category)),但是得到的结果却是乱序的,产生这个问题的根本原因自然在MapReduce,如果启动了多于一个mapper/reducer来处理数据,select出来的数据顺序就几乎肯定与原始顺序不同了。
机器学习和大数据挖掘
2020/05/28
3.1K0
Hive学习-lateral view 、explode、reflect和窗口函数
然后挂了FAILED: SemanticException [Error 10081]: UDTF's are not supported outside the SELECT clause, nor nested in expressions
顾翔
2024/09/10
6080
Hive学习-lateral view 、explode、reflect和窗口函数
大数据 面试 SQL 041 按照顺序进行行转列拼接
今天这个题目来自群里的小伙伴考我的:已知有表中含有两列数据id,val,数据内容如下,请按照id的大小将val进行拼接。
数据仓库晨曦
2024/01/08
3010
大数据 面试 SQL 041 按照顺序进行行转列拼接
Hive的基本知识(三)Hive中的函数大全
针对内置的函数,可以根据函数的应用类型进行归纳分类,比如:数值类型函数、日期类型函数、字符
Maynor
2021/12/07
1.5K0
hive行转列/列转行
先用concat_ws函数将将星座和血型用“,”连接后group by 用collect_set函数对name聚合,用concat_ws函数对聚合后的name用“|”分割
chimchim
2022/11/13
2.2K0
hive行转列/列转行
大数据面试SQL035-用户行为路径分析
有一张用户操作行为记录表 t_act_log_035 包含用户ID(user_id),操作编号(op_id),操作时间(op_time)
数据仓库晨曦
2024/02/27
2852
大数据面试SQL035-用户行为路径分析
【Hive】SQL语句大全
继承 org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;
全栈程序员站长
2022/08/30
2.7K0
Hive根据用户自定义函数、reflect函数和窗口分析函数
(2)UDAF(User-Defined Aggregation Function)
顾翔
2024/09/10
4740
Hive根据用户自定义函数、reflect函数和窗口分析函数
大数据入门与实战-Hive 常见SQL、技巧与问题
SQL 中的 TRIM 函数是用来移除掉一个字串中的字头或字尾。最常见的用途是移除字首或字尾的空白。
致Great
2019/05/29
1.3K0
hive学习笔记之二:复杂数据类型
执行结果如下,第一条记录friends数组中有tom_friend_0,显示为true,第二条记录不包含,就显示false:
程序员欣宸
2021/06/28
5220
京东大数据面试SQL-合并数据
首先题目虽然给出了最终期望结果,但描述实在不够清晰,所以我给题目清晰度打分3⭐️。这里我对题目进行进一步描述
数据仓库晨曦
2024/05/18
2740
京东大数据面试SQL-合并数据
Hive常用的函数总结
前言 上一篇文章《Hive查询的18种方式,你都学会了吗?》为大家系统地介绍了Hive查询的18种方式,受到了一些朋友的好评,让笔者备受鼓舞。于是本篇文章,我们再来学习关于Hive常用
大数据梦想家
2021/01/27
1.6K1
Hive常用的函数总结
最强最全面的Hive SQL开发指南,超四万字全面解析!
hive -S -e 'select table_cloum from table' -S,终端上的输出不会有mapreduce的进度,执行完毕,只会把查询结果输出到终端上。
五分钟学大数据
2021/12/02
8.1K0
最强最全面的Hive SQL开发指南,超四万字全面解析!
算法人必懂的Hive知识-四道Hive面试&笔试题解析
近期在不同群里有小伙伴们提出了一些在面试和笔试中遇到的Hive SQL问题,Hive作为算法工程师的一项必备技能,在面试中也是极有可能被问到的,所以有备无患,本文将对这四道题进行详细的解析,还是有一定难度的,希望你看完本文能够有所收获。
石晓文
2019/08/09
1.8K0
算法人必懂的Hive知识-四道Hive面试&笔试题解析
相关推荐
最强最全面的大数据SQL面试题和答案(由31位大佬共同协作完成)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档