【Hive】常见优化方法

  1. 列裁剪
    select后面跟要选择的列,由于hive中数据采用列式存储,选择需要的字段可加快字段的读取、减少数据量。(节省了读取开销,中间表存储开销和数据整合开销)
  2. 分区裁剪
    where条件第一个为分区字段,
  3. 多值group by
    如果group by后面有多个字段时,将更多值的字段放在前面,如group by有user_id和sex两个字段,应该是group by user_id、sex
  4. order by
    order by时尽量使用limit,尽量避免使用order by。Order by需要扫描数据到单个worker节点进行排序,导致单个worker需要大量内存。如果是查询Top N或者Bottom N,使用limit可减少排序计算和内存压力
  5. 大小表join
    Join时将大表放在左边:join时会将左边的表分割到多个worker,然后将join右边的表数据整个复制一份发送到每个worker进行计算。如果右边的表数据量太大,则可能会报内存溢出错误
  6. union 和 union all
    UNION ALL 代替 UNION :不用去重.和distinct的原因类似, UNION有去重的功能, 所以会引发内存使用的问题.如果只是拼接两个或者多个SQL查询的结果, 考虑用UNION ALL
  7. 谓词下推
    在子查询中,where条件应当放在子查询内部,而非外部。
  8. distinct
    使用group by代替distinct,当要计算某一列去重数据量时,使用count(distinct)时,速度很慢,原因和order by一样,数据将会在一个reduce中处理,此时可以使用group by语句替代

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值