在impala中将yyyymmdd字符串转换为日期

falq053o  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(2383)

我在impala中使用sql来编写这个查询。我正在尝试将以yyyymmdd格式存储的日期字符串转换为日期格式,以便运行如下查询:

SELECT datadate, 
       session_info
FROM database
WHERE datadate >= NOW() - INTERVAL 5 DAY
ORDER BY datadate DESC;

自从 >= NOW() - INTERVAL 5 DAY 代码无法处理yyyymmdd字符串,我想找到一种方法将其转换为适用于这种查询类型的日期格式。我的想法是,它应该看起来像这样(基于对其他sql查询编辑器的类似问题),但在impala中不起作用:

SELECT datadate,
       session_info,
       convert(datetime, '20141008', 102) AS session_date
FROM database
WHERE session_date >= NOW() - INTERVAL 5 DAY
ORDER BY session_date DESC;

有人知道在 Impala 怎么做吗?
编辑:
我终于找到了解决这个问题的有效办法。没有尝试使用的配置 CAST 或者 CONVERT 将在impala中工作,但下面的查询解决了问题,并且是完全可操作的,允许对包含字符串值的列执行日期数学:

SELECT datadate,
       session_info
FROM database
WHERE datadate >= from_unixtime(unix_timestamp(now() - interval 5 days), 'yyyyMMdd')
GROUP BY datadate
ORDER BY datadate DESC;
u2nhd7ah

u2nhd7ah1#

本地方式:

to_timestamp(cast(date_number AS STRING), 'yyyyMMdd')
vdgimpew

vdgimpew2#

要忽略小时/分钟/秒,使用 from_timestamp ,结果 2020-01-01 .
从_timestamp(cast('2020-01-01 01:01:01.000000'作为时间戳),'yyyy-mm-dd')中选择;

o4tp2gmn

o4tp2gmn3#

参见[链接更新2020-08-24]上的时间戳文字:
https://docs.cloudera.com/cdp-private-cloud-base/7.1.3/impala-sql-reference/topics/impala-literals.html
您需要将破折号添加到字符串中,以便impala能够将其转换为日期/时间戳。你可以这样做:

concat_ws('-', substr(datadate,1,4), substr(datadate,5,2), substr(datadate,7) )

你可以用它来代替 datadate 在你的表情里。

相关问题