在 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) ;
我有一个查询,其中我需要提取以毫秒为单位的时间戳以匹配来自源的数据。 以下是来自 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) ;