从时间戳im Impala获得毫秒级

时间:2017-10-24 04:35:10

标签: timestamp impala

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

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

Target是Hadoop通过Impala并定义为Timestamp

U_Date
2007-10-26 10:07:00
2005-05-04 11:12:54.297000000
2013年5月31日4时07分00秒
2013-11-01 15:34:00

我正在寻找查询来获取Source中显示的时间戳,以毫秒为单位。 我把我的查询放在一起,但默认为毫秒到000。

从表A中选择from_unixtime(unix_timestamp(u_date),'yyyy-MM-dd HH:mm:ss.SSS')

生成的结果集如下:

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

请分享您的意见

2 个答案:

答案 0 :(得分:0)

要获得格式化的时间戳最多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上测试)

答案 1 :(得分:0)

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

  

像这样的东西1525245791828

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

您可以这样做:

cast((you_unix_timestamp_with_milliseconds_column/1000) as BIGINT)