【踩坑】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
相关推荐
AQin101232 分钟前
【对比向】既生瑜何生亮?不!Hive 和 Doris不一样
数据仓库·hive·hadoop·doris
段一凡-华北理工大学1 小时前
工业领域的Hadoop架构学习~系列文章19:能源行业Hadoop应用实践
大数据·人工智能·hadoop·分布式·学习·架构·高炉炼铁
Database_Cool_1 小时前
数据仓库弹性扩缩容实践:阿里云 AnalyticDB MySQL 按需付费方案详解
数据仓库·mysql·阿里云
zhangjin12222 小时前
DataX从入门到精通 第3课 ETL之DataX datax-web单表数据同步
数据仓库·etl·datax·datax-web·datax单表同步
AQin10122 小时前
【对比向】细算“成本”——Hive vs. Doris
大数据·数据库·hive·doris·实时数仓
知识分享小能手1 天前
Hadoop学习教程,从入门到精通, 初识Hadoop — 知识点详解(1)
大数据·hadoop·学习
青春万岁!!1 天前
hive分区表加字段后insert字段为空
数据仓库·hive·hadoop
Database_Cool_2 天前
AnalyticDB MySQL vs StarRocks/ByteHouse:云数仓选型指南——全托管 vs 自建方案
数据库·数据仓库·mysql·阿里云
涤生大数据2 天前
从 ETL 到 Agent:AI数据工程如何搭建企业级“数据工厂“
数据仓库·人工智能·etl
Eileen Seligman2 天前
0CTF/TCTF 2023 OLAPInfra Nashorn RCE + HDFS UDF RCE
大数据·hadoop·hdfs·ctf·rce