在 Impala 中从时间戳获取毫秒

Get milisecond from Timestamp im Impala

我有一个查询,其中我需要提取以毫秒为单位的时间戳以匹配来自源的数据。 以下是来自 SQL 服务器(来源)的示例数据,列定义为 Datetime

U_Date
2007-10-26 10:07:00.000
2005-05-04 11:12:54.297
2004-05-29 03:56:24.792

目标是通过 Impala 的 Hadoop 并定义为时间戳

U_Date
2007-10-26 10:07:00
2005-05-04 11:12:54.297000000
2013-05-31 04:07:00
2013-11-01 15:34:00

我正在寻找查询以获取源中显示的时间戳(以毫秒为单位)。 我已经将我的查询放在一起,但它默认毫秒为 000。

select from_unixtime(unix_timestamp(u_date),'yyyy-MM-dd HH:mm:ss.SSS') 从 table A

生成的结果集如下:

2007-10-26 10:07:00.000
2005-05-04 11:12:54.000(毫秒 .297 默认为 000)
2013-05-31 04:07:00.000
2013-11-01 15:34:00.000

请分享您的意见

要获得最多 3 位毫秒的格式化时间戳,您可以使用 from_timestamp 函数

SELECT from_timestamp(u_date, 'yyyy-MM-dd HH:mm:ss.SSS') FROM table;

函数 unix_timestamp 以某种方式丢弃了毫秒信息,而函数 from_unixtime 似乎也不能很好地用毫秒解释 unix 时间戳

(在 Impala v2.9.0 上测试)

如果您的数据库中存储了以毫秒为单位的 Unix 时间戳

Something like this 1525245791828

并且您想从此字段中删除毫秒,以便您可以进行 Unix 时间戳比较。

你可以这样做:

cast((you_unix_timestamp_with_milliseconds_column/1000) as BIGINT)

我使用 milliseconds_add 或 microseconds_add 和 from_unixtime(0), 例如

select milliseconds_add(from_unixtime(0), your_unix_timestamp_with_milliseconds_column) ;
select microseconds_add(from_unixtime(0), your_unix_timestamp_with_microseconds_column) ;