比较 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 似乎成功了。
我试过:
- 将字符串转换为时间戳,然后减去 2 个值。这returns一个错误"AnalysisException: Arithmetic operation requires numeric operands"
- 使用 unix_timestamp 函数。这会将值截断为代表秒的 int,因此亚秒级值会丢失。
在写这个问题时我找到了答案:)
做到这一点的方法是使用双重演员表。
Cast(cast(time_stamp) as timestamp) as double)
这使得 times_stamp 成为一个数字,而不会截断亚秒值。
一旦到了那里,它就变成了一个微不足道的算术运算。
我有 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 似乎成功了。 我试过:
- 将字符串转换为时间戳,然后减去 2 个值。这returns一个错误"AnalysisException: Arithmetic operation requires numeric operands"
- 使用 unix_timestamp 函数。这会将值截断为代表秒的 int,因此亚秒级值会丢失。
在写这个问题时我找到了答案:)
做到这一点的方法是使用双重演员表。
Cast(cast(time_stamp) as timestamp) as double)
这使得 times_stamp 成为一个数字,而不会截断亚秒值。
一旦到了那里,它就变成了一个微不足道的算术运算。