网站首页 > 技术文章 正文
查询优化
- map端优化
当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。
select /*+ MAPJOIN(time_dim) */ count(*) from
store_sales join time_dim on (ss_sold_time_sk = t_time_sk);
---
select /*+ MAPJOIN(time_dim, date_dim) */ count(*) from
store_sales
join time_dim on (ss_sold_time_sk = t_time_sk)
join date_dim on (ss_sold_date_sk = d_date_sk)
where t_hour = 8 and d_year = 2002
---
set hive.auto.convert.join=true;
set hive.auto.convert.join.noconditionaltask = true;
set hive.auto.convert.join.noconditionaltask.size = 10000000;
select count(*) from
store_sales join time_dim on (ss_sold_time_sk = t_time_sk)
当数据量比较大启动mapjoin后会造成问题请关闭
- group by 优化
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。
猜你喜欢
- 2024-10-12 大数据分析工具——hive入门 hive数据分析的一般流程是什么
- 2024-10-12 019Hive基本使用03 019Hive基本使用03 #liaoit
- 2024-10-12 手把手教你搭建Hive环境 搭建hive集群
- 2024-10-12 0474-如何使用SQL Developer访问Hive
- 2024-10-12 Hive 迁移参考方案及测试(下) hive表迁移
- 2024-10-12 0263-Hive2.2.0如何与CDH集群中的Spark1.6集成
- 2024-10-12 如何在HUE上通过oozie调用Hive SQL工作流
- 2024-10-12 百度二面:你做过哪些Hive调优啊? hive调优与参数设置
- 2024-10-12 HiveSQL:如何从给定的日期中减去指定数量的天数?
- 2024-10-12 0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)