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,如需转载请自行联系原作者


相关文章
|
9月前
|
SQL 分布式计算 HIVE
Hive Cli / HiveServer2 中使用 dayofweek 函数引发的BUG!
在Hive 3.1.2和Spark 3.0.2集群环境中,遇到`dayofweek`函数bug。当`create_date`为字符串类型时,`dayofweek`函数结果错位。修复方法是将`create_date`转换为`date`类型。在Spark SQL中,原始代码能正常运行,未出现此问题。因此建议在Hive中使用转换后的日期类型以避免错误。
132 4
|
SQL 分布式计算 数据管理
聊聊Hive数据血缘——从Atlas没有列级血缘的Bug讲起
聊聊Hive数据血缘——从Atlas没有列级血缘的Bug讲起
306 0
|
9月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
236 1
|
4月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
117 0