昨天发现线上的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相关推荐

  1. 报错:org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.

    报错环境: CDH中集成的hive服务,启动报错,所以初始化一下元数据. 配置文件:/etc/hive/conf hive-site.xml 命令目录:/opt/cloudera/parcels/CD ...

  2. 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 ...

  3. Hive初始化问题 Failed to get schema version.

    Hive初始化问题 Failed to get schema version. 要细看自己的问题是什么! 引起Failed to get schema version.的原因有很多,我遇到的如下: 1 ...

  4. hive 报错 FAILED: SemanticException Cannot find class ‘com.hadoop.mapred.DeprecatedLzoTextInputFormat’

    hive 报错 FAILED: SemanticException Cannot find class 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' ...

  5. fdisk时WARNING: Re-reading the partition table failed with error 16: 设备或资源忙 的问题解决方案

    WARNING: Re-reading the partition table failed with error 16: 设备或资源忙 现象:划分磁盘有警告, WARNING: Re-reading ...

  6. [hive 报错]:FAILED: SemanticException Line 0:-1 Partition not found

    问题:FAILED: SemanticException Line 0:-1 Partition not found ''19'' 这种情况一般是你创建的表是多级分区(比如day,hour),若操作时 ...

  7. (详细)解决hive报错FAILED: SemanticException Cartesian products are disabled for safety的问题

    在使用hive-2.3.3执行TPC-H benchmark时,遇到hive报错.而且这个错误不是以Java异常栈的形式跑出的,很可能被忽略: FAILED: SemanticException Ca ...

  8. hive partition简介

    一.背景 1.在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念. 2.分区表指的是在创建表 ...

  9. 解决hive报错FAILED: SemanticException Cartesian products are disabled for safety的问题

    1.先看问题: FAILED: SemanticException Cartesian products are disabled for safety reasons. If you know wh ...

最新文章

  1. LeetCode简单题之数组中两元素的最大乘积
  2. centos5安设apache和svk运用域用户验证
  3. 大型的labview程序实例_【学院推荐】LabVIEW的核心要素——数据流
  4. Silverlight的跨站策略和跨站策略文件
  5. [hls]m3u8视频如何处理成加密?
  6. matlab 图像的色彩强度,图像色彩增强的问题,,,小白给跪,
  7. SM2 国密算法被 Linux 内核社区接受
  8. java xml date_W3C XML 模式时间数据类型与java Date进行转换
  9. C++工作笔记- C++中的动态类型与动态绑定、虚函数、运行时多态的实现
  10. virtualbox ,centos 的多网卡如何设置
  11. Java BigDecimal应用
  12. Redis(3-3):列表类型
  13. 上线了!游戏企业防沉迷落实情况有了举报平台
  14. 评教数据的存储和显示问题
  15. adb shell 查找并删除文件
  16. TCP_IP Sockets编程C语言实现第2版 源码下载
  17. scala基础-04
  18. getBoundingClientRect()来获取页面元素的位置”
  19. 你还在生产环境改代码么?函数计算版本管理(三)使用别名进行灰度发布...
  20. Thinkpad8在Windows10下假关机的解决办法

热门文章

  1. 通过kubeadm的方式以及二进制包的方式安装k8s的对比总结---K8S_Google工作笔记0016
  2. Linux多线程工作笔记0005---Linux多线程基础_创建线程pthread_create_线程等待_线程终止
  3. ASP.Net学习笔记002--ASP.Net服务端控件做了什么2
  4. Oracle零碎要点---多表联合查询,收集数据库基本资料
  5. 量化交易入门读物列表
  6. 收藏!斯坦福Andrew Ng教授“机器学习”26篇教程全译
  7. Unable to resolve target 'android-7'
  8. 随想录(B+树的实现)
  9. hibernate 链接mysql数据库配置文件,hibernate数据库连接文件(MySql)
  10. oracle 下和 db2的syscat 对应的,oracle db2命令对比(整理中)