Нельзя использовать расчетное смещение в функции DATE_ADD в BigQuery.

Я пытаюсь создать собственный запрос в Tableau для использования в Google BigQuery. Цель состоит в том, чтобы иметь параметр смещения в Tableau, который изменяет смещения, используемые в предложении WHERE на основе даты.

В Tableau это будет выглядеть так:

  SELECT
DATE_ADD(UTC_USEC_TO_MONTH(CURRENT_DATE()),<Parameters.Offset>-1,"MONTH") as month_index,
COUNT(DISTINCT user_id, 1000000) as distinct_count
  FROM
[Orders]
  WHERE
order_date >= DATE_ADD(UTC_USEC_TO_MONTH(CURRENT_DATE()),<Parameters.Offset>-12,"MONTH")
  AND
order_date < DATE_ADD(UTC_USEC_TO_MONTH(CURRENT_DATE()),<Parameters.Offset>-1,"MONTH")

Однако BigQuery всегда возвращает ошибку:

Error: DATE_ADD 2nd argument must have INT32 type.

Когда я пытаюсь выполнить тот же запрос в редакторе BigQuery, используя простую арифметику, он завершается с той же ошибкой.

SELECT
DATE_ADD(UTC_USEC_TO_MONTH(CURRENT_DATE()),5-3,"MONTH") as month_index,
  FROM [Orders]

Любое обходное решение для этого? Кажется, мой единственный вариант — сделать несколько смещений в Tableau.

Спасибо за помощь!


person Wouter    schedule 01.06.2015    source источник
comment
Это не связано с отсутствующей функциональностью часового пояса. Мы на 2 часа раньше UTC летом и всего на 1 зимой.   -  person Wouter    schedule 01.06.2015


Ответы (2)


Я признаю, что это дыра в функциональности DATE_ADD. Это можно исправить, но это займет некоторое время, прежде чем исправление будет запущено в производство.

person Mosha Pasumansky    schedule 01.06.2015
comment
Спасибо Моша. Можем ли мы проследить это где-нибудь? - person Wouter; 01.06.2015
comment
Укажите эту проблему на странице code.google.com/p/google-bigquery и Я приму это там. - person Mosha Pasumansky; 01.06.2015
comment
Хорошо, введено как проблема 254: code.google.com/p. /google-bigquery/issues/detail?id=254 - person Wouter; 02.06.2015

Вот возможный обходной путь. Кажется, это работает, если первым аргументом DATE_ADD является строка. Затем вы можете обрезать результат до границы месяца и преобразовать его из временной метки в строку.

SELECT
FORMAT_UTC_USEC(UTC_USEC_TO_MONTH(DATE_ADD(CURRENT_DATE(),5-3,"MONTH"))) as month_index;
person sprocket    schedule 02.06.2015