我有一个如下所示的数据集:
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:000 UTC之间获取数据'到2016年12月8日18:33:00 UTC'
答案 0 :(得分:0)
使用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)
...将您的shitty String格式转换为UNIX时间戳,然后转换为String标准格式(在本地时区,因为它是Hive约定),然后转换为时间戳。
不幸的是,没有更简单的方法。 由于夏季/冬季时间重叠1小时,您可能会遇到一些边缘情况 。
来源:Hive documentation,当然......
<小时/> 使用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)
...会将您的糟糕String格式转换为UNIX时间戳, 假设所有输入都是UTC ,然后转换为String标准格式(因为UTC时区,因为这是Impala惯例),然后是时间戳。