包含hivegroup_concat的词条
本篇文章给大家谈谈hivegroup_concat,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
hive关于行转列,列转行的使用
行转列:
定义:就是把形如
id --------- name
1 --------- a
2 --------- a
3 --------- a
4 --------- a
的数据转换为
id ------------- name
1,2,3,4 --------- a
这里把四行的数据卜颂瞎变成了由一行显示,这就是行转列。
首先要用到的是collect_set或者collect_list,前者去重,后者不去重,一般配合group使用,能把形如:
id --------- name
1 --------- a
2 --------- a
3 --------- a
4 --------- a
转换为
id --------- name
["1","2","3","4"] --------- a
然后需要用到的是concat_ws函数,这个函数需要传递指定分隔符,以及字符串或者字符串数组。能起到把多个字符串拼接到一起的作用。
形如:
id --------- name
["1","2","3","4"] --------- a
通过concat_ws(',',[1,2,3,4])转换为
id --------- name
1,2,3,4 --------- a
连起来就完成了行转列
一般sql为:
列转行
定义:就是把形如
id ------------- name
1,2,3,4 --------- a
的数据樱败转换为
id --------- name
1 --------- a
2 --------- a
3 --------- a
4 --------- a
这里把一行的数据变成了由四行显示,这就是列转行。
首先要用到split函数,这个行数可以把字符串按照指定的规则切分为字符串数组。
形如:
id --------- name
1,2,3,4 --------- a
通过split('1,2,3,4',',')转换为
id --------- name
["1","2","3","4"] --------- a
然后是explode函数,这个行数可以把数组的每个元素转换为一行。
形如
id
["1","2","3","4"]
通过explode(["1","2","3","4"] )转换为
id
1
2
3
4
最后为了拼接其它字段,还需要用到lateral view把explode获得的行当虚拟表来用型空。
使用方法为 lateral view explode(split(["1","2","3","4"] , ',')) tmptable as new_id ;
其中new_id元素为转换为行后的字段名。
把以上综合起来就完成了列转行
一般sql为:
[img]Hive常用查询函数
函数说明:
NVL :给值为 NULL 的数据赋值,
它的格式是
NVL( string1, replace_with)。
它的功能是如果string1 为 NULL,则 NVL 函数返回 replace_with 的值,否则返回 string1 的值,如果两个参数都为 NULL ,则返回NULL。
date_format:格式化时间
date_add:时间跟天数相加
date_sub:时间跟天数相减,类似与add,使用一个就ok
select date_sub('2019-06-29',5);
datediff:两个时间相减
select datediff('2019-06-29','2019-06-24');
CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串;
CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。
分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL, 返回值也将为 NULL。
这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;
select concat_ws('-',str1,str2) from XX; //str为string类型的列名
COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,
产生 array 类芹毁型字段。
练习:把星座和血型一样的人归类到一起
第一步转换:
白羊座,A 孙悟空
射手座,A 大海
白羊座,B 宋宋
白羊座,A 猪八戒
射手座,A 凤姐
合并销前
EXPLODE(col):将hive 一嫌斗备列中复杂的 array 或者 map 结构拆分成多行。
LATERAL VIEW //侧写
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:用于和 split, explode 等UDTF 一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
练习:将电影分类中的数组数据展开
select explode(category) from movie_info;
OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化;
/ 在over(里面使用) /
CURRENT ROW:当前行;
n PRECEDING:往前 n 行数据;
n FOLLOWING:往后 n 行数据;
UNBOUNDED:起点,
UNBOUNDED PRECEDING 表示从前面的起点,UNBOUNDEDFOLLOWING 表示到后面的终点;
/* 在over外面使用*/
LAG(col,n):往前第n 行数据;
LEAD(col,n):往后第 n 行数据;
NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从 1 开始,
对于每一行,NTILE 返回此行所属的组的编号。注意:n 必须为 int 类型。
数据:
一、查询在 2017 年 4 月份购买过的顾客及总人数
group分组一组一个值,over给每一条数据独立开窗
查询顾客的购买明细及购买总额
要将 cost 按照日期进行累加
先排序
再累加
查询顾客上次的购买时间
下次的购买时间
查询前 20%时间的订单信息
RANK() 排序相同时会重复,总数不会变,可以并列
DENSE_RANK() 排序相同时会重复,总数会减少
ROW_NUMBER() 会根据顺序计算
练习:计算每门学科成绩排名
计算每门学科成绩排名
大数据之-HIVE入门(十四)
当join时有一个或多个小表可以装载进内存时可以使用mapjoin完成。
第一种方法是可以加上mapjoin指示
第二种方法是设置 set hive.auto.convert.join=true;来让hive自动优化。同时可以指定
set hive.auto.convert.join.noconditionaltask = true; --默认开启
set hive.auto.convert.join.noconditionaltask.size = 10000000; --默认10M,可以根据需求做调整。
hive.mapjoin.smalltable.filesize= 2500000;--早期hive版本小表文件大小设置默认25M。
当数据量比较大启动mapjoin后会造成问题请关闭
set hive.map.aggr = true; //是否在 Map 端进行聚合,默认为 True ;
set hive.groupby.mapaggr.checkinterval = 100000000; //在 Map 端进行聚合操作的条目数目
1、在关联操作前尽量减小数据集,能先聚合的先聚合、能过滤的先过滤(如设置查询条件、合理设置分枣凳雹区,有分区必须设置分区范围)。
2、关联时数据类型要做到一致,如果不一致请用cast先转换类型。
3、慎用count(distinct) ,容易产生数据倾斜,可以先group by 再count。
4、减少小文件,合理设置输入文件大小、合理设置map job 、reduce job数。
set hive.merge.mapredfiles=true;--设置合并map文件标识。
set mapred.max.split.size=100000000; --设置最大输入文件大小,大于此数值都会进行拆分。
set mapred.min.split.size.per.node=100000000;--设置每个节点可处理的最小值。
set mapred.min.split.size.per.rack=100000000;--设粗晌置每个机架可处理的最小值。
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; – 执行前进行小文件合并。
set mapred.reduce.tasks=10; -- 设置reduce的数量
set hive.exec.reducers.bytes.per.reducer=1073741824 --设置每个reduce所处理的数据大小
5、选取字段避免用select * ,只引用你要用的字段,如select a.uid,a.price。
6、关联值有null值的情况下,可以将null值过滤出来单独处理或者将null值随机赋值。当存在某key有热点问题,也可以同样处理。
7、合理设置数据模型、文件存储格式有利于查询效率优化。凳帆
8、善用union all 合并对于同一个表的查询,有利于整体提高效率。
9、合理使用中间临时表,数据量巨大时,如统计一年的数据,可先小规模聚合如按月聚合生成中间表,最后再合并统计出结果。
10、有order by 要限制输出条数。
11、合理设置并行查询
set hive.exec.parallel= true ; --以开启并发执行。
set hive.exec.parallel.thread.number= 10 ; //同一个sql允许最大并行度,默认为8。
关于hivegroup_concat和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。