Я использую SQL в Импале, чтобы написать этот запрос. Я пытаюсь преобразовать строку даты, сохраненную в формате YYYYMMDD, в формат дата в целях выполнения запроса, как это:Преобразование YYYYMMDD String to Date в Impala
SELECT datadate,
session_info
FROM database
WHERE datadate >= NOW() - INTERVAL 5 DAY
ORDER BY datadate DESC;
Поскольку >= NOW() - INTERVAL 5 DAY
кода не будет работать со строкой ГГГГММДДА, я 'd хотел бы найти способ конвертировать это в формат даты, который будет работать с этим типом запроса. Моя мысль в том, что она должна выглядеть следующим образом (на основе аналогичных вопросов о других редакторов 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?
EDIT:
Я наконец-то нашел работающее решение этой проблемы. Ни одна из попыток с использованием конфигурации 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;
посмотреть на 'месяц (20141008)' и 'год (20141008)' –
@vkp функции 'MONTH()' и 'YEAR()' работают в данных Impala, хранящихся как дата или временная метка, но это не работают для строковых данных. – nxl4
посмотреть документацию http://www.cloudera.com/content/cloudera/en/documentation/cloudera-impala/latest/topics/impala_datetime_functions.html –