我有一个查询,其中我需要提取时间戳以毫秒来匹配来自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
请分享您的意见
答案 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)