Как я могу запланировать запрос в Google BigQuery для добавления новых данных в таблицу? - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь использовать новую функцию планирования запросов в Google BigQuery, но не могу заставить ее правильно добавлять новые записи в мою таблицу.

Я установил Custom schedule на every 15 minutes и Destination table write preference на Append to table.

SELECT DATETIME_TRUNC(DATETIME(logtime, 'America/Los_Angeles'), MINUTE) log_minute,
  COUNT(DISTINCT user_id) users,
  COUNT(DISTINCT product_id) unique_products
FROM mytable
WHERE DATE(logtime, 'America/Los_Angeles') >= "2019-05-01"
GROUP BY log_minute
ORDER BY log_minute

Я ожидал увидеть 1 строку на log_minute, но я вижу дубликаты: 1 строка на log_minute для каждого запланированного запуска, так что через час в каждой строке будет 5 дубликатов (1 в начале + 1 за каждые 15 минут).

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Я ожидал увидеть 1 строку на log_minute, но я вижу дубликаты: 1 строка на log_minute для каждого запланированного прогона

Хотите добавить новые строки?Конечно, вы будете видеть новую строку каждый раз, когда выполняется запрос - потому что вы добавляете строки.

Если вы хотите UPDATE вместо существующих и добавить новые, запланируйте MERGE.

0 голосов
/ 14 мая 2019

Спасибо за совет, Фелипе! Для тех, кто пытается сделать то же самое, я отредактировал запрос следующим образом:

MERGE nextvr.sched_test_15min H
USING 
(
    SELECT TIMESTAMP(DATETIME_TRUNC(DATETIME(logtime, 'America/Los_Angeles'), MINUTE)) log_minute,
      COUNT(DISTINCT user_id) users,
      COUNT(DISTINCT product_id) products
    FROM mytable
    WHERE DATE(logtime, 'America/Los_Angeles') >= "2019-05-01"
    GROUP BY log_minute
) N
ON H.log_minute = N.log_minute
WHEN MATCHED THEN
    UPDATE 
        SET users = N.users, products = N.products
WHEN NOT MATCHED THEN
    INSERT (log_minute, users, products)
        VALUES (log_minute, users, products)

При создании запланированного запроса в разделе Destination for query results оставьте поле Table name пустым.

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