Hive partition prune Failed

简介:

昨天发现线上的HiveQuery

1
select  from  db1.t1where dt  between  to_char(getdate(‘variables’,’-40’),’yyyymmdd’)  and  ‘variables’ and  hour =’xxx’(其中t1 partitioned bydt, hour )

不能进行partition prune导致执行效率非常的差,问题出现在哪里呢?

To_Char函数的代码翻出来就一目了然了:

1
2
3
4
5
6
7
8
9
10
11
@UDFType (deterministic=  false )
@Description (name=  "to_char" ,
         value =  "_FUNC_(date, pattern)  converts a string with yyyy-MM-dd HH:mm:sspattern "  +
                 "to a string with givenpattern.\n"
         + "_FUNC_(datetime, pattern)  converts a string with yyyy-MM-dd pattern"  +
                 "to a string with givenpattern.\n"
         + "_FUNC_(number [,format]) convertsa number to a string\n" ,
         extended =  "Example:\n"
         + " > SELECT to_char('2011-05-1110:00:12'.'yyyyMMdd') FROM src LIMIT 1;\n"
         + "20110511\n"
)

注意到这个函数是一个“非确定性”函数,Hive在做partition prune时考虑三点不进行过滤处理:

1.如果是逻辑函数的话,若所有的child节点都为null则忽略

2.非确定性函数忽略

3.其他情况,只要有child节点为null则忽略

而这里的to_char正是第二种情况,这里我们自己写了个确定性UDF来解决该问题

注:另外一个类似的Case HIVE-1173



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



相关文章
|
SQL HIVE 存储
|
SQL HIVE
hive 动态分区(Dynamic Partition)异常处理
Changing Hive Dynamic Partition Limits Symptoms: Hive enforces limits on the number of dynamic partitions that it creates.
2098 0
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
338 1
|
4月前
|
SQL 分布式计算 大数据
大数据新视界 --大数据大厂之Hive与大数据融合:构建强大数据仓库实战指南
本文深入介绍 Hive 与大数据融合构建强大数据仓库的实战指南。涵盖 Hive 简介、优势、安装配置、数据处理、性能优化及安全管理等内容,并通过互联网广告和物流行业案例分析,展示其实际应用。具有专业性、可操作性和参考价值。
大数据新视界 --大数据大厂之Hive与大数据融合:构建强大数据仓库实战指南
|
11月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
219 0
|
SQL 分布式计算 大数据
大数据处理平台Hive详解
【7月更文挑战第15天】Hive作为基于Hadoop的数据仓库工具,在大数据处理和分析领域发挥着重要作用。通过提供类SQL的查询语言,Hive降低了数据处理的门槛,使得具有SQL背景的开发者可以轻松地处理大规模数据。然而,Hive也存在查询延迟高、表达能力有限等缺点,需要在实际应用中根据具体场景和需求进行选择和优化。

热门文章

最新文章