Hive partition prune Failed
昨天发现线上的HiveQuery:
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函数的代码翻出来就一目了然了:
@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
转载于:https://blog.51cto.com/boylook/1365734
Hive partition prune Failed相关推荐
- 报错:org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
报错环境: CDH中集成的hive服务,启动报错,所以初始化一下元数据. 配置文件:/etc/hive/conf hive-site.xml 命令目录:/opt/cloudera/parcels/CD ...
- org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version, Cause:Table ‘hive.
CDH报错:org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version, Cause:Table ...
- Hive初始化问题 Failed to get schema version.
Hive初始化问题 Failed to get schema version. 要细看自己的问题是什么! 引起Failed to get schema version.的原因有很多,我遇到的如下: 1 ...
- hive 报错 FAILED: SemanticException Cannot find class ‘com.hadoop.mapred.DeprecatedLzoTextInputFormat’
hive 报错 FAILED: SemanticException Cannot find class 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' ...
- fdisk时WARNING: Re-reading the partition table failed with error 16: 设备或资源忙 的问题解决方案
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙 现象:划分磁盘有警告, WARNING: Re-reading ...
- [hive 报错]:FAILED: SemanticException Line 0:-1 Partition not found
问题:FAILED: SemanticException Line 0:-1 Partition not found ''19'' 这种情况一般是你创建的表是多级分区(比如day,hour),若操作时 ...
- (详细)解决hive报错FAILED: SemanticException Cartesian products are disabled for safety的问题
在使用hive-2.3.3执行TPC-H benchmark时,遇到hive报错.而且这个错误不是以Java异常栈的形式跑出的,很可能被忽略: FAILED: SemanticException Ca ...
- hive partition简介
一.背景 1.在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念. 2.分区表指的是在创建表 ...
- 解决hive报错FAILED: SemanticException Cartesian products are disabled for safety的问题
1.先看问题: FAILED: SemanticException Cartesian products are disabled for safety reasons. If you know wh ...
最新文章
- LeetCode简单题之数组中两元素的最大乘积
- centos5安设apache和svk运用域用户验证
- 大型的labview程序实例_【学院推荐】LabVIEW的核心要素——数据流
- Silverlight的跨站策略和跨站策略文件
- [hls]m3u8视频如何处理成加密?
- matlab 图像的色彩强度,图像色彩增强的问题,,,小白给跪,
- SM2 国密算法被 Linux 内核社区接受
- java xml date_W3C XML 模式时间数据类型与java Date进行转换
- C++工作笔记- C++中的动态类型与动态绑定、虚函数、运行时多态的实现
- virtualbox ,centos 的多网卡如何设置
- Java BigDecimal应用
- Redis(3-3):列表类型
- 上线了!游戏企业防沉迷落实情况有了举报平台
- 评教数据的存储和显示问题
- adb shell 查找并删除文件
- TCP_IP Sockets编程C语言实现第2版 源码下载
- scala基础-04
- getBoundingClientRect()来获取页面元素的位置”
- 你还在生产环境改代码么?函数计算版本管理(三)使用别名进行灰度发布...
- Thinkpad8在Windows10下假关机的解决办法
热门文章
- 通过kubeadm的方式以及二进制包的方式安装k8s的对比总结---K8S_Google工作笔记0016
- Linux多线程工作笔记0005---Linux多线程基础_创建线程pthread_create_线程等待_线程终止
- ASP.Net学习笔记002--ASP.Net服务端控件做了什么2
- Oracle零碎要点---多表联合查询,收集数据库基本资料
- 量化交易入门读物列表
- 收藏!斯坦福Andrew Ng教授“机器学习”26篇教程全译
- Unable to resolve target 'android-7'
- 随想录(B+树的实现)
- hibernate 链接mysql数据库配置文件,hibernate数据库连接文件(MySql)
- oracle 下和 db2的syscat 对应的,oracle db2命令对比(整理中)