Hive或Impala中从会话到时间戳的会话

时间:2019-06-05 10:56:07

标签: date hive timestamp impala

是否有一种简单的方法将Impala或Hive中的int转换为timestamp数据类型。

我正在使用以下代码将int转换为时间戳,但我认为这不是一种有效的方法。

20180520

CAST(concat(substring(CAST(datalake_date as string),1,4),'-',substring(CAST(datalake_date as string),5,2),'-',substring(CAST(datalake_date as string),7,2)) 
     AS TIMESTAMP)

---用于提取Year ---

,date_part('Year',
CAST(concat(substring(CAST(datalake_date as string),1,4),'-',substring(CAST(datalake_date as string),5,2),'-',substring(CAST(datalake_date as string),7,2)) 
     AS TIMESTAMP)
          ) datalake_date

2018

2 个答案:

答案 0 :(得分:0)

您可以像这样直接将其解析为Unix时间戳

select unix_timestamp('20180520', 'yyyyMMdd');

之后,您将拥有多个UDF来操纵日期,提取年,日等/

答案 1 :(得分:0)

使用select from_unixtime(unix_timestamp( '20180520','yyyyMMdd'),'yyyy-MM-dd'); 将给定的日期format转换为从1970-01-01开始的秒数。然后使用from_unixtime()转换为所需的format

OK
2018-05-20
Time taken: 0.057 seconds, Fetched: 1 row(s)

返回:

select substr('20180520',1,4);
OK
2018
Time taken: 3.062 seconds, Fetched: 1 row(s)

提取年份的简单方法是使用substr:

year()

或者在上述(请参阅第一个查询)转换为标准配置单元格式“ yyyy-MM-dd”之后,您可以使用date_format,{{1}}函数