Hive的一次踩坑[2]
记录一次可以稳定复现的Hive的Bug。如果是在生产环境,一定要注意规避。
首先准备数据,建表、插入数据一气呵成。
1 | 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; |
这里插入了三条数据,可以有id,姓名,到来时间和离开时间,共4个字段。
查一下数据
1 | select * from temp_101; |
假设有一个需求是,找到 2020年5月20号 离开的人的相关信息,那么SQL可以这么写
1 | select * from temp_101 where date(go_date)='2020-05-20'; |
在HUE中显示如下,可以发现go_date这个字段的时分秒不显示了。难道是HUE的问题?
去Hive-Cli中执行,发现同样如此。
那么基本可以确定这是Hive中的一个Bug(也许是Feature),暂时看怎么解决吧。
- 尝试使用to_date替换date
1 | select * from temp_101 where to_date(go_date)='2020-05-20'; |
- 尝试使用substring代替date
1 | select * from temp_101 where substring(go_date,1,10)='2020-05-20'; |
上面两种改写都是OK的
上谷歌翻了一圈,确认是Hive的一个至今为解决的Bug,地址在这