前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0777-5.16.2-Hive中使用Date函数用于条件查询结果异常分析

0777-5.16.2-Hive中使用Date函数用于条件查询结果异常分析

作者头像
Fayson
发布2020-06-01 10:40:50
9520
发布2020-06-01 10:40:50
举报
文章被收录于专栏:Hadoop实操

作者:辉少

异常描述

  • 测试环境

1.RedHat7.2

2.CM和CDH版本为5.16.2

在CDH5.16.2 中使用Hive时 ,当Hive 的查询where条件中使用Date函数后,函数中的列的值会在返回结果中被改变,导致结果不正确。具体表现为使用Date 函数当查询条件后导致string 格式的日期丢失了时间部分,只有日期。展示如下:

代码语言:javascript
复制
select * from testdate;
SELECT * from testdate where Date(str2) == '2020-05-24';

异常重现

重新创建表复现该问题

代码语言:javascript
复制
create table testdate2 (str1 string , str2 string ,str3 string, str4 string);
insert into table testdate2 values ("日期测试1",'2020-05-24 19:50:32','2020-05-24','testdate');
insert into table testdate2 values ("日期测试2",'2020-05-24 20:20:32','2020-05-25','testdate2');

分别使用带Date 函数条件、不带条件 、以及其他条件查看,确认的确存在该问题

代码语言:javascript
复制
SELECT * from testdate2 where Date(str2) == '2020-05-24';
select * from testdate2;
SELECT * from testdate2 where str3 == '2020-05-25';

异常分析

关于以上问题,与Hive的一个已知BUG HIVE-22513[1]有关,主要是由于Hive对列条件过滤操作中的持续传播从而导致错误的结果。Hive 自0.14.0开始,加入了一项CBO (Cost based Optimizer),来对HQL执行计划进行优化,这个功能通过”hive.cbo.enable”来开启。Hive 1.1.0 之后,该功能默认开启,而CDH5.16.2 中Hive 版本1.1.0,因此受影响。

异常解决和总结

对于Date函数持续传播从而导致错误的结果基于上述分析,提供以下2种解决办法

1.单个查询中临时关闭CBO,在Hive 1.1.0 可以通过set hive.optimize.constant.propagation = false; 来临时关闭单个查询,缺点是可能会影响query的性能。从参考文档[2][3]中可以看出,使用constant.propagation会在一定条件下在query进入执行阶段前预先计算部分值,所以对query影响具体是因query不同而不同的。

代码语言:javascript
复制
set hive.optimize.constant.propagation = false; 
SELECT * from testdate2 where Date(str2) == '2020-05-24';

2.使用其他函数代替Date 函数,比如substr(str2,1,10) = '2020-05-24'

代码语言:javascript
复制
SELECT * from testdate2 where substr(str2,1,10) = '2020-05-24';

参考文档:

代码语言:javascript
复制
[1] https://issues.apache.org/jira/browse/HIVE-22513
[2] https://en.wikipedia.org/wiki/Constant_folding#Constant_propagation
[3] https://issues.apache.org/jira/browse/HIVE-5771
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档