在Impala中将YYYYMMDD字符串转换为日期

nxl*_*xl4 9 sql hadoop impala

我在Impala中使用SQL来编写此查询.我正在尝试将以YYYYMMDD格式存储的日期字符串转换为日期格式,以便运行如下查询:

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

由于>= 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;
Run Code Online (Sandbox Code Playgroud)

任何人都知道在Impala中如何做到这一点?

编辑:

我终于找到了解决问题的有效方法.没有尝试使用Impala的配置CASTCONVERT在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;
Run Code Online (Sandbox Code Playgroud)

小智 9

原生方式:

to_timestamp(cast(date_number AS STRING), 'yyyyMMdd')
Run Code Online (Sandbox Code Playgroud)


Tur*_*ile 8

时间戳字面http://www.cloudera.com/content/cloudera/en/documentation/cloudera-impala/latest/topics/impala_literals.html

您需要将破折号添加到字符串中,以便Impala能够将其转换为日期/时间戳.你可以这样做:

concat_ws('-', substr(datadate,1,4), substr(datadate,5,2), substr(datadate,7) )
Run Code Online (Sandbox Code Playgroud)

您可以使用而不是datadate在表达式中使用它.