Hive left join右表分区条件写在where后,查询慢

打印 上一主题 下一主题

主题 950|帖子 950|积分 2850

 #Hive常见故障 #大数据 #生产情况真实案例 #Hive #离线数据库 #整理 #经验总结
说明:此篇总结hive常见故障案例处置处罚方案 结合自身经历 总结不易 +关注 +收藏 欢迎留言
更多Hive案例汇总方案 解决方案:请往下翻

left join右表分区条件写在where后,查询慢

题目
查询慢,右表会举行全表扫描。
缘故原由
例如:
  1. select t1.id
  2. from student_p t1
  3. left join test0617 t2
  4. on t1.id=t2.id
  5. where t1.pt_dt<'2022-02-xx' and t2.pt_dt<'202206xx';
复制代码
副表(即下令中的t2)表,where条件写在join后面,会导致先全表关联再过滤分区。固然主表(下令中的t1)表分区条件也写在join后面,但是主表会谓词下推,先实行分区过滤再举行join
打印实行计划可以看到SQL扫描了副表的不在条件内的分区:

解决方法
将副表的分区过滤条件写在join中,上述例子可修改为:
  1. select t1.id
  2. from student_p t1
  3. left join test0617 t2
  4. on t1.id=t2.id and t2.pt_dt<'202206xx'
  5. where t1.pt_dt<'2022-02-xx';
复制代码
打印实行计划可以看到,06xx分区不再扫描,只扫描指定的分区:




更多Hive案例汇总方案 (点击跳转)
Hive常见故障多案例维护宝典 --项目总结(宝典一)

Hive常见故障多案例维护宝典 --项目总结(宝典二)

目录内容如下:

架构概述

【1】参数及配置类常见故障



  • 实行set下令的时候报cannot modify xxx at runtime.
  • 怎样在Hive提交使命的时候指定队列?
  • 怎样在导入表时指定输出的文件压缩格式
  • desc描述表过长时,无法显示完备
  • 增加分区列后再insert数据显示为NULL
  • 怎样设置hive on spark 模式及提交使命到指定队列
  • hive on spark应用怎样设置spark应用的参数?
  • 怎样设置map和reduce个数
  • MapReduce使命内存溢出题目处置处罚
  • 动态分区方式插入数据,创建过多文件/分区
  • mapjoin相干参数
  • Tez引擎和MapReduce引擎实行结果差别

【2】使命运行类常见故障



  • Hive使命运行过程中失败,重试成功
  • 实行select语句报错
  • drop partition操作有大量分区时操作失败
  • localtask启动失败
  • 切域后Hive二次开发样例代码报错
  • 输入文件数超出设置限定导致使命实行失败
  • 使命实行中报栈内存溢出导致实利用命失败
  • 对同一张表或分区并发写数据导致使命失败
  • Hive使命失败,报没有HDFS目录的权限
  • Metastore连接数过高导致hive使命实行慢或使命失败
  • bonecp参数含义解析
  • 连接Metastore超时,导致使命失败
  • 数据查询非常,部门字段为Null
  • return code 1:unable to close file
  • Tez和MapReduce引擎下,Hive举行join的结果不一致
  • Hive表里有数据count无结果
  • hive-sql报values太长
  • 实行hive-sql插入数据重复
  • tez引擎写入的数据,切换mr引擎后查询不出来

【3】SQL使用类常见故障



  • join中非常规join on写法导致使命运行慢
  • 视图中多表union all,视图外指定分区查询慢
  • over(partition by orde by)使用同一字段,MapReduce使命运行慢
  • join on条件中使用or
  • SQL扫描分区过多,元数据SQL拼接过长报错
  • join表重复数据多,使命运行慢
  • SQL过于复杂,嵌套过多,导致HiveSQL编译时间过长
  • join on中加判断,导致MapReduce使命运行慢
  • join on中带不即是条件,导查询的数据都为Null
  • 特殊写法导致大数据量只有一个reduce
  • cascade级联修改表字段
  • alter table drop partition删除大量分区慢、报错
  • 大分区表查询不带分区,查询慢
  • 两表关联,关联字段类型不一致
  • left join右表分区条件写在where后,查询慢
  • SparkSQL嵌套过多,大量case when
  • SparkSQL没有group by的情况下使用having
  • 设置自定义参数出现递归调用
  • 视图存在全表扫或者大量分区查询
  • 大量使用with as并在SQL中多处调用
  • insert into table values情势插入大量数据
  • 多表关联过滤条件中按in的子查询举行过滤
  • string类型字段过滤不加引号
  • 使用order by null
  • 使用浮点数举行运算
  • 并发插入同表或同分区

最后
谢谢大家 @500佰

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表