记录一次可以稳定复现的Hive的Bug。如果是在生产环境,一定要注意规避。
首先准备数据,建表、插入数据一气呵成。

1
2
3
4
5
create table if not exists temp_101 (id string, name string,come_date string,go_date string) row format delimited fields terminated by '\001' stored as orc;
insert into temp_101 values
('1001','Jack','2020-01-01 09:15:26','2020-02-12 12:25:29'),
('1002','Mike','2020-02-07 18:15:26','2020-03-18 11:02:15'),
('1003','Jhon','2020-03-15 15:15:26','2020-05-20 15:21:42');

这里插入了三条数据,可以有id姓名到来时间离开时间,共4个字段。

查一下数据

1
select * from temp_101;

image-20200527201128911

假设有一个需求是,找到 2020年5月20号 离开的人的相关信息,那么SQL可以这么写

1
select * from temp_101 where date(go_date)='2020-05-20';

在HUE中显示如下,可以发现go_date这个字段的时分秒不显示了。难道是HUE的问题?

image-20200527201333957

去Hive-Cli中执行,发现同样如此。

image-20200527201626965

那么基本可以确定这是Hive中的一个Bug(也许是Feature),暂时看怎么解决吧。

  • 尝试使用to_date替换date
1
select * from temp_101 where to_date(go_date)='2020-05-20';

image-20200527201837107

  • 尝试使用substring代替date
1
select * from temp_101 where substring(go_date,1,10)='2020-05-20';

image-20200527202021174

上面两种改写都是OK的

上谷歌翻了一圈,确认是Hive的一个至今为解决的Bug,地址在这

https://issues.apache.org/jira/browse/HIVE-22513