1. hive的执行计划
1.1 为什么使用EXPLAIN
在处理大数据查询
时,性能是一个关键问题
。复杂的查询可能涉及多个表的连接、过滤、分组和排序操作,这些操作如果处理不当,会导致查询效率低下,甚至无法完成。在Hive中,EXPLAIN命令可以帮助我们理解查询的执行计划
,识别出潜在的性能瓶颈,从而进行有针对性的优化
。
1.2 使用EXPLAIN的步骤
使用EXPLAIN命令只需在查询语句前加上EXPLAIN关键字,即可查看该查询的执行计划。通过EXPLAIN输出的执行计划,可以看到每个阶段的操作,如表扫描、数据过滤、分组聚合等。
- 编写SQL查询:确定要执行的查询。
- 添加EXPLAIN关键字:在查询面前加上EXPLAIN
EXPLAIN SELECT ...;
1.3 EXPLAIN在什么场合使用
EXPLAIN
命令适用于以下场合:
- 复杂查询:当查询涉及多个表的连接、复杂的过滤条件或分组聚合时,使用EXPLAIN可以帮助理解查询的执行步骤,并能找出性能瓶颈。
- 查询优化:在优化查询性能时,EXPLAIN可以帮助验证优化的效果。
- 调试查询:如果查询执行时间过长或结果不符合预期,使用EXPLAIN可以帮助诊断问题,发现潜在的错误或低效的操作。
2. 分桶
2.1 为什么要使用分桶
- 为了抽样
在处理大规模数据集时,在开发和修改查询的阶段,可以使用整个数据集的一部分进行抽样测试查询、修改。可以使得开发更高效。 - 为了提高查询
连接两个在(包含连接列的)相同列上划分了桶的表,可以使用Map端连接(Map-side join)高效的实现。
比如join操作,对于join操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行join操作就可以,可以大大减少join的数据量。
3. Map Join
3.1 Map Join
Map Join就是在Map阶段进行表之间的连接
。而不需要进入到Reduce阶段才进行连接。这样就节省了在shuffle阶段时要进行大量的数据传输
,从而起到了优化作业的作用。
要使MapJoin能够顺利进行,就必须满足这样的条件:除了一份表的数据分布在不同的Map中外,其他连接的表的数据必须在每个Map中有完整拷贝。
所以并不是所有的场景都适合用Map join。它通常会用在如下的一些场景:在两个要连接的表中,有一个大表,有一个小表
,这个小表可以存放在内存中而不影响性能。
这样就可以把小表文件复制到每一个Map任务的本地,再让Map把文件读到内存中待用。
3.1.1 大小表关联
select f.a