Hive from_unixtime 毫秒
Hive from_unixtime for milliseconds
我们在 Hive 中存储了一个时间戳纪元列 (BIGINT)。
我们想要获得这个纪元的日期 'yyyy-MM-dd'。
问题是我的纪元以毫秒为单位,例如1409535303522。
所以 select timestamp, from_unixtime(timestamp,'yyyy-MM-dd') 给出错误的日期结果,因为它期望以秒为单位的纪元。
所以我尝试将它除以 1000。但随后它被转换为 Double,我们无法对其应用函数。当我尝试将此双精度转换为 Bigint 时,甚至 CAST 也不起作用。
通过以下查询解决了问题:
select timestamp, from_unixtime(CAST(timestamp/1000 as BIGINT), 'yyyy-MM-dd') from Hadoop_V1_Main_text_archieved limit 10;
timestamp_ms 是以毫秒为单位的 unixtime
SELECT from_unixtime(floor(CAST(timestamp_ms AS BIGINT)/1000), 'yyyy-MM-dd HH:mm:ss.SSS') as created_timestamp FROM table_name;
在原始答案中你会得到字符串,但如果你想得到日期你需要用日期调用额外的转换:
select
timestamp,
cast(from_unixtime(CAST(timestamp/1000 as BIGINT), 'yyyy-MM-dd') as date) as date_col
from Hadoop_V1_Main_text_archieved
limit 10;
Docs 用于转换日期和时间戳。将字符串转换为日期:
cast(string as date)
If the string is in the form 'YYYY-MM-DD', then a date value corresponding to that year/month/day is returned. If the string value does not match this formate, then NULL is returned.
日期类型仅可从 Hive > 0.12.0
如前所述 here:
DATE
(Note: Only available starting with Hive 0.12.0)
类型应为double
以确保精度不丢失:
select from_unixtime(cast(1601256179170 as double)/1000.0, "yyyy-MM-dd hh:mm:ss.SSS") as event_timestamp
我们在 Hive 中存储了一个时间戳纪元列 (BIGINT)。 我们想要获得这个纪元的日期 'yyyy-MM-dd'。 问题是我的纪元以毫秒为单位,例如1409535303522。 所以 select timestamp, from_unixtime(timestamp,'yyyy-MM-dd') 给出错误的日期结果,因为它期望以秒为单位的纪元。
所以我尝试将它除以 1000。但随后它被转换为 Double,我们无法对其应用函数。当我尝试将此双精度转换为 Bigint 时,甚至 CAST 也不起作用。
通过以下查询解决了问题:
select timestamp, from_unixtime(CAST(timestamp/1000 as BIGINT), 'yyyy-MM-dd') from Hadoop_V1_Main_text_archieved limit 10;
timestamp_ms 是以毫秒为单位的 unixtime
SELECT from_unixtime(floor(CAST(timestamp_ms AS BIGINT)/1000), 'yyyy-MM-dd HH:mm:ss.SSS') as created_timestamp FROM table_name;
在原始答案中你会得到字符串,但如果你想得到日期你需要用日期调用额外的转换:
select
timestamp,
cast(from_unixtime(CAST(timestamp/1000 as BIGINT), 'yyyy-MM-dd') as date) as date_col
from Hadoop_V1_Main_text_archieved
limit 10;
Docs 用于转换日期和时间戳。将字符串转换为日期:
cast(string as date)
If the string is in the form 'YYYY-MM-DD', then a date value corresponding to that year/month/day is returned. If the string value does not match this formate, then NULL is returned.
日期类型仅可从 Hive > 0.12.0
如前所述 here:
DATE
(Note: Only available starting with Hive 0.12.0)
类型应为double
以确保精度不丢失:
select from_unixtime(cast(1601256179170 as double)/1000.0, "yyyy-MM-dd hh:mm:ss.SSS") as event_timestamp