Hive 调优

本文探讨了如何通过调整Hive配置、优化查询语法来提高查询效率,包括查看执行计划、调整limit参数、进入严格模式以及利用并行执行等功能。详细介绍了通过修改配置文件、使用特定语法优化查询过程,从而实现更高效的查询执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 使用 explain 查看执行计划
explain extended select count(distinct(name)) from employees;

2. 调整limit 相关参数
一条查询语句如果有limit 限制, 他也会扫描整个表

3. 严格模式
修改hive-site.xml
 <property>
    <name>hive.mapred.mode</name>
    <value>strict</value>
    <description>Deprecated; use hive.strict.checks.* settings instead.</description>
  </property>
效果:
1.where 的谓词中必须包含分区字段
select * from employees where country = "CHINA"
2. 有order by 的时候必须加limit, order by 最后会在一个reducer 上执行, 防止reducer 执行时间过长
select * from employees where country = "CHINA" order by name limit 3;
3. 限制笛卡尔集 上使用where 过滤

4. 并行执行
hive 查询会被分成若干阶段: MapReduce阶段, 抽样阶段, 合并阶段, limit 阶段。hive 每次执行一个阶段, 如果这些阶段并非完全依赖,这样可以并行执行
修改: hive-site.xml
<property>
    <name>hive.exec.parallel</name>
    <value>true</value>
    <description>Whether to execute jobs in parallel</description>
  </property>

5. 调整reducer 和 map 的个数

6. 若干常量用来调试定位异常数据位置,称为虚拟列
select INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, ROW__OFFSET__INSIDE__BLOCK from employees where country = "CHINA" and name = 'John Doe';
 INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, ROW__OFFSET__INSIDE__BLOCK 都是虚拟列。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值