如何在Google BigQuery中安排查询以将新数据追加到表中?

时间:2019-05-13 22:57:48

标签: google-bigquery

我正在尝试使用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

我希望每log_minute看到1行,但是我看到重复:每log_minute每预定运行1行,因此一小时后,每行有5个重复(1在开始时+每15分钟1个。

2 个答案:

答案 0 :(得分:1)

  

我希望每log_minute看到1行,但我看到重复项:每次计划运行,每log_minute有1行

是否要追加新行?当然,每次查询运行时您都会看到一个新行-因为您要追加行。

如果您想UPDATE来代替现有的并添加新的,请安排MERGE

答案 1 :(得分:0)

谢谢小费,费利佩!对于尝试执行相同操作的任何人,我将查询编辑为以下内容:

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字段中留空。