将where子句中的字符串更改为datetime格式以进行比较

hgncfbus  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(336)

我的数据集如下所示:

datetime                                 count        
18:28:20.602 UTC DEC 08 2016                1
20:42:32.017 UTC DEC 08 2016                5
15:33:40.691 UTC DEC 08 2016                1
17:11:54.008 UTC DEC 08 2016                3
20:28:57.861 UTC DEC 08 2016                0
.
.
.
.

datetime列为字符串格式。我很难把它转换成时间戳。
如何编写impala/hive查询以获取“2016年12月8日18:28:00.000 utc”到“2016年12月8日18:33:00.000 utc”之间的数据

k0pti3hp

k0pti3hp1#

带Hive:

cast(from_unixtime(unix_timestamp(SHITTY_FORMAT, 'HH:mm:ss.SSS zzz MMM dd yyyy'), 'yyyy-MM-dd HH:mm:ss.SSS') as Timestamp)

…将把你糟糕的字符串格式转换成unix时间戳,然后转换成字符串标准格式(在本地时区,因为这是配置单元约定),然后转换成时间戳。
不幸的是,没有更简单的办法了。由于夏季和冬季的1h重叠,可能会出现一些边缘情况。
来源:当然是Hive文档。。。
与 Impala (不支持 zzz 格式修改器):

cast(from_unixtime(unix_timestamp(regexp_replace(SHITTY_FORMAT, ' UTC ', ' '), 'HH:mm:ss.SSS MMM dd yyyy'), 'yyyy-MM-dd HH:mm:ss.SSS') as Timestamp)

…将把你的垃圾字符串格式转换成unix时间戳,假设你所有的输入都是utc格式,然后转换成字符串标准格式(utc时区,因为这是impala惯例),然后转换成时间戳。

相关问题