Hive partition prune的一个Bug

简介:

昨天跑了一个Hive查询发现启动的MAP数远远多于预期,很奇怪;查询可以简单抽象如下:

比如有一个表t的分区键dt string;查询select count(*) from t where dt=20130926;

是哪里出了问题呢?首先看一下执行计划果然发现问题了:

首先出现了:

expr: (dt = 2.0130926E7)

type: boolean

其次partition valuesdt __HIVE_DEFAULT_PARTITION__

应该发生了类似隐式转换的事情吧?修改成dt=’20130926’再看正确了.

因为隐式转换而无法使用索引的情况在RDBMS比较常见,但是这个如果是隐式转换也说不通,因为只是多扫描了一个分区而不是全部分区,带着这样的疑问看源码:得到的结论就是Hive的分区键列和值都必须是String类型,如果不是就可能会Hitbug 4878(pruneBySequentialScan),不知道为什么CDH4.2没有merge这个patch.

Update:这个Bug已经在Hive 0.12被fixed掉了



本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1302073,如需转载请自行联系原作者


相关文章
|
5月前
|
SQL 分布式计算 数据管理
聊聊Hive数据血缘——从Atlas没有列级血缘的Bug讲起
聊聊Hive数据血缘——从Atlas没有列级血缘的Bug讲起
|
4月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
97 1
|
4月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
74 0
|
6月前
|
SQL 分布式计算 大数据
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 入门
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 入门
68 0