【踩坑】hive脚本笛卡尔积严重降低查询效率问题

前一阵子查看我们公司的大数据平台的离线脚本运行情况, 结果发现有一个任务居然跑了一天多, 要知道这还只是几千万量级的表, 且这个任务是每天需要执行的

于是我把hive脚本捞出来看了下, 发现无非多join了几个复杂的子查询, 应该不至于这么久, 包括我又检查了是不是没有加上每日分区的筛选条件

在反反复复测试调整以后, 我发现问题出在这里:

隐式join的时候顺序问题会导致错误的笛卡尔积(不确定什么版本hive)
假如t1和t2关联,t2和t3关联, 但是如果写成了from t1,t3,t2比如下面这样, 就会造成t1和t3直接笛卡尔积, 再和t2笛卡尔积, 再where筛选

sql 复制代码
-- 
select x
from t1,t3,t2
where t1.id = t2.t1_id 
and t2.id = t3.t2_id

比如t1,t2,t3表都是1000, 彼此关联的是10条, 则按常理应该是t1和t2筛选和关联后得到临时表10条, 然后这10条再和t3进行10*1000筛选和关联.

但是根据explain解释执行, 貌似hive会将上面的直接1000* 1000*1000 可想而知这个效率会是怎么样

最后改为正确的顺序, 从1天多变成了二几分钟.搞定

结论

  1. hive这个不知道是不是bug, 也可能后续会修复, 但是保险起见最好按表的关联顺序来写
  2. 建议用显式join查询
  3. 写完hive脚本测试跑一次看看效率,不确定就explain
相关推荐
学代码的CJY12 小时前
CJY 知识工作台:博客写作使用指南
数据仓库·知识图谱
Q264336502317 小时前
【有源码】基于文本挖掘的消费者金融投诉主题发现与风险预警研究,基于Python的CFPB消费者投诉数据可视化分析系统
大数据·hadoop·机器学习·数据挖掘·spark·毕业设计·课程设计
喻师傅18 小时前
Apache Hudi 概述:从 Parquet 更新难题到数据湖 Upsert
大数据·数据仓库·big data
Q264336502320 小时前
【有源码】基于机器学习的商场商铺运营分群与可视化分析研究 基于Spark的商场商铺经营效率分析与可视化
大数据·hadoop·机器学习·数据挖掘·数据分析·spark·毕业设计
Gl�ria21 小时前
Hadoop MapReduce / Hive 场景:ReduceTask 热点 Key 排查
运维·hadoop·数据倾斜
Q26433650232 天前
【有源码】基于机器学习的电信网络诈骗话术语义识别与可视化分析系统 XGBoost算法+Hadoop+Spark
大数据·hadoop·算法·机器学习·spark·毕业设计·课程设计
Q26433650232 天前
【有源码】基于 Hadoop 的强化学习智能体轨迹数据挖掘与可视化分析系统大数据毕设项目
大数据·hadoop·机器学习·数据挖掘·spark·课程设计·数据可视化
Q26433650232 天前
【有源码】基于大数据的药品多维度属性分析可视化系统 基于Spark的药品属性聚类与关联规则可视化分析系统
hadoop·机器学习·数据挖掘·spark·毕业设计·课程设计·大数据项目
网络豆2 天前
Apache Hive 鸿蒙 PC 适配全记录:以 Qt 客户端打通 HiveQL、监控与元数据访问
hive·apache·harmonyos
Q26433650232 天前
【有源码】基于大数据的零售交易者行为特征与生存状况数据分析及可视化 Hadoop+Spark大数据项目
大数据·hadoop·信息可视化·数据挖掘·数据分析·spark·毕业设计