Результаты за последние 30 дней в BigQuery
Я пытаюсь создать запрос для панели мониторинга таблиц, которая связана с Google BigQuery. У нас есть таблицы для каждого месяца данных, но я хочу представить данные за последние 30 дней в любой момент времени (поэтому придется проходить через несколько таблиц). Текущий запрос, который у меня есть, выдает ошибку "Литерал временной метки или явное преобразование в метку времени требуется". Я искал некоторую помощь о том, как преобразовать в метку времени, но не нашел ничего полезного. Это мой код
SELECT
DATE(date_time) AS date,
FROM
TABLE_QUERY(myTable, "date(concat(left(table_id,4),'-',right(table_id,2),'-','01')) >= '2017-06-01'")
WHERE
DATE(date_time) >= DATE_ADD(day,-30, current_date())
and DATE(date_time) <= current_date()
ORDER BY
date
Буду очень признателен за любую помощь в том, как заставить его работать.
Примечание: мы используем устаревший SQL
3 ответа
Любой, кто хочет сделать то же самое с BigQuery Standard SQL, вернет данные за последние 30 дней, основанные на текущей дате.
https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions
SELECT
date,
FROM
`<PROJECT>.<DATASET>.<TABLE>`
WHERE
Date >= DATE_ADD(CURRENT_DATE(), INTERVAL -30 DAY);
Используя собственную документацию Google, вам может понадобиться изменить параметры в функции DATE_ADD(). Функция должна вызываться с тремя параметрами следующим образом:
DATE_ADD(<timestamp>,<interval>,<interval_units>)
с единицами измерения интервала, представляющими собой единицу времени, на которую вы ссылаетесь (день, час, год и т. д.)
Причина, по которой вы получаете ошибку, заключается в том, что Google пытается конвертировать day
в какой-то date
формат.
Источник: Google Query Reference
Цитируемый текст:
DATE_ADD (отметка времени, интервал, интервал_единиц)
Добавляет указанный интервал к типу данных TIMESTAMP. Возможные значения interval_units включают YEAR, MONTH, DAY, HOUR, MINUTE и SECOND. Если интервал является отрицательным числом, интервал вычитается из типа данных TIMESTAMP.
Пример:
SELECT DATE_ADD (TIMESTAMP ("2012-10-01 02:03:04"), 5, "YEAR");
Возвращает: 2017-10-01 02:03:04 UTC
SELECT DATE_ADD (TIMESTAMP ("2012-10-01 02:03:04"), -5, "YEAR");
Возвращает: 01-10-2007, 02:03 UTC
Формат был изменен в соответствии с документацией Google.
SELECT DATE_ADD(DATE "2008-12-25", INTERVAL 5 DAY) AS five_days_later;