Bigquery 计划设置为在固定时间运行。如果您的传入数据在交付时间上有所不同,那么 BigQuery 计划就不是您想要的。
但是,如果您坚持使用 BigQuery 计划,则可以放宽 WHERE 条件,并在下次计划运行时捕获“缺失”天数。然后你翻转了你的问题,而是需要处理不附加已经附加的行的情况(也增加了查询成本):
SELECT *
FROM `analytics.events_*`
LEFT JOIN [target dataset].[target table] AS T
USING (event_name, event_timestamp, user_pseudo_id)
WHERE T.event_name IS NULL
AND T.event_timestamp IS NULL
AND T.user_pseudo_id IS NULL
AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 2 DAY))
或者您也可以将查询修改为 INSERT 语句,在其中插入记录并以类似方式处理重复:
INSERT `[target dataset].[target table]`
SELECT *
FROM `analytics.events_*`
LEFT JOIN `[target dataset].[target table]` AS T
USING (event_name, event_timestamp, user_pseudo_id)
WHERE _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 2 DAY))
AND T.event_name IS NULL
AND T.event_timestamp IS NULL
AND T.user_pseudo_id IS NULL
那么您就不需要为计划配置目标表了。
此外,如果您的目标表是时间戳分区的,您可以通过添加一个严格限制为单个日期而不是整张桌子:
...
AND DATE(T.event_timestamp) = DATE_SUB(CURRENT_DATE(), INTERVAL 2)
...