BigQuery INSERT INTO, когда запрос не возвращает результаты - PullRequest
0 голосов
/ 18 марта 2020

Я сохраняю в таблице BigQuery (table_a) некоторые события. В 00:00 всех дней я делаю запланированный запрос, чтобы сохранить в другой таблице (table_b) счетчик определенного события c, которое я получил в тот день. У этого запланированного запроса не возникло никаких проблем, когда я получил это событие, но на тот случай, если в тот день я не получу ни одного из этих указанных c событий, которые я получил в запросе «Этот запрос не дал результатов», но Я хочу добавить в table_b значение INSIGHT_VALUE со значением 0.

Как я могу это сделать?

Это плановый запрос, который я использую:

INSERT INTO
  `my_project.my_dataset.table_b` (
    DATESTAMP,
    INSIGHT_VALUE)
SELECT
  CURRENT_TIMESTAMP() AS DATESTAMP,
  COUNT(*) AS INSIGHT_VALUE
FROM
  `my_project.my_dataset.table_a`
WHERE
  DATE(event_datestamp, 'Europe/Madrid') = CURRENT_DATE()
  AND event_message LIKE '%specific_event%'
GROUP BY
  DATESTAMP

1 Ответ

2 голосов
/ 18 марта 2020

Удалить GROUP BY:

INSERT INTO `my_project.my_dataset.table_b` (DATESTAMP, INSIGHT_VALUE)
    SELECT CURRENT_TIMESTAMP AS DATESTAMP,
           COUNT(*) AS INSIGHT_VALUE
    FROM `my_project.my_dataset.table_a`
    WHERE DATE(event_datestamp, 'Europe/Madrid') = CURRENT_DATE() AND
          event_message LIKE '%specific_event%'

Запрос агрегации без GROUP BY всегда возвращает одну строку. Большинство функций агрегирования возвращают NULL значений, но COUNT() возвращает 0.

CURRENT_TIMESTAMP является «константой» в запросе, поэтому его не нужно включать в агрегацию - значение просто вычисляется для каждой возвращаемой строки (ну, для строки , которая возвращается).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...