比较 HDFS 中的毫秒时间戳

Comparing millisecond timestamps in HDFS

我有 2 个时间戳列存储在 HDFS 中,我可以通过 Impala、hive 等访问它们...

我需要比较的时间戳可能如下例所示:

2014-04-08 00:23:21.687000000

2014-04-08 00:23:21.620000000

由于毫秒数不同,需要构建一个新列,在此示例中其值应为 0.067000

我试过使用 impala 的 built in time functions,但其中 none 似乎成功了。 我试过:

  1. 将字符串转换为时间戳,然后减去 2 个值。这returns一个错误"AnalysisException: Arithmetic operation requires numeric operands"
  2. 使用 unix_timestamp 函数。这会将值截断为代表秒的 int,因此亚秒级值会丢失。

在写这个问题时我找到了答案:)

做到这一点的方法是使用双重演员表。

Cast(cast(time_stamp) as timestamp) as double)

这使得 times_stamp 成为一个数字,而不会截断亚秒值。

一旦到了那里,它就变成了一个微不足道的算术运算。