Hive 从_unixtime蜂巢数毫秒

Hive 从_unixtime蜂巢数毫秒,hive,unix-timestamp,epoch,milliseconds,Hive,Unix Timestamp,Epoch,Milliseconds,我们在配置单元中存储了一个时间戳历元列(BIGINT)。 我们希望获取此纪元的日期“yyy-MM-dd”。 问题是我的历元以毫秒为单位,例如1409535303522。 因此,选择timestamp,from_unixtime(timestamp,'yyyy-MM-dd')会给出错误的日期结果,因为它期望以秒为单位的历元 所以我试着把它除以1000。但随后它被转换为Double,我们不能对它应用函数。当我尝试将此double转换为Bigint时,甚至CAST也不起作用。通过以下查询解决了此问题:

我们在配置单元中存储了一个时间戳历元列(BIGINT)。 我们希望获取此纪元的日期“yyy-MM-dd”。 问题是我的历元以毫秒为单位,例如1409535303522。 因此,选择timestamp,from_unixtime(timestamp,'yyyy-MM-dd')会给出错误的日期结果,因为它期望以秒为单位的历元


所以我试着把它除以1000。但随后它被转换为Double,我们不能对它应用函数。当我尝试将此double转换为Bigint时,甚至CAST也不起作用。

通过以下查询解决了此问题:

select timestamp, from_unixtime(CAST(timestamp/1000 as BIGINT), 'yyyy-MM-dd') from Hadoop_V1_Main_text_archieved limit 10;

时间戳\u ms是unixtime(毫秒)

从表格名称中创建的时间戳中选择\u unixtime(floor(CAST(timestamp作为BIGINT)/1000),'yyyy-MM-dd HH:MM:ss.SSS'


在原始答案中,您将获得字符串,但如果您想获得日期,则需要调用带有日期的额外演员:

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;

用于铸造日期和时间戳。用于将字符串转换为日期:

cast(字符串作为日期)

如果字符串的格式为“YYYY-MM-DD”,则返回对应于该年/月/日的日期值。如果字符串值与此格式不匹配,则返回NULL

日期类型仅在Hive>
0.12.0
中可用,如前所述:

日期
(注意:仅从Hive 0.12.0开始提供)


类型应为
double
,以确保精度不会丢失:

select from_unixtime(cast(1601256179170 as double)/1000.0, "yyyy-MM-dd hh:mm:ss.SSS") as event_timestamp

如果将格式更改为“yyyy-MM-dd HH:MM:ss.SSS”,则此操作无效。。它给出了一个错误-类org.apache.hadoop.hive.ql.udf.UDFFromUnixTime与(双精度,字符串)没有匹配方法。