web-dev-qa-db-ja.com

YYYYMMDD文字列をImpalaの日付に変換する

このクエリを作成するために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;
_

誰もがインパラでこれを行う方法を知っていますか?

編集:

私は最終的に問題の実用的な解決策を見つけました。 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;
_
9
nxl4

http://www.cloudera.com/content/のTimestamp Literals)を参照してくださいcloudera/en/documentation/cloudera-impala/latest/topics/impala_literals.html

文字列にダッシュを追加して、Impalaがダッシュを日付/タイムスタンプに変換できるようにする必要があります。あなたは次のようなことでそれを行うことができます:

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

式でdatadateの代わりに使用できます。

8
Turophile

ネイティブの方法:

to_timestamp(cast(date_number AS STRING), 'yyyyMMdd')
1
user3331901