Результаты за последние 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;
Другие вопросы по тегам