尝试执行MERGE语句时,BigQuery仅扫描请求的分区,直到添加DELETE语句为止,此时它将恢复为扫描整个数据集(在这种情况下,从1GB刷新到大于1TB)。
有没有办法使用MERGE的全部功能,包括DELETE,而又不会产生额外的费用?
与下面我的工作相匹配的通用样本:
MERGE target_table AS t *## All Dates, partitioned on
activity_date*
USING source_table AS s ## one date, only yesterday
ON t.field_a = s.field_a
AND t.activity_date >=
DATE_ADD(DATE(current_timestamp(),'America/Los_Angeles'), INTERVAL -1 DAY) ## use partition to limit to yesterday
WHEN MATCHED
THEN UPDATE SET
field_b = s.field_b
WHEN NOT MATCHED
THEN INSERT
(field_a, field_b)
VALUES
(field_a, field_b)
WHEN NOT MATCHED BY SOURCE
THEN DELETE
答案 0 :(得分:2)
根据您提供的查询,将合并应用于整个数据集是不正常的行为。查询运行后,您应该分析数据集并检查其有效性,以确保查询仅在特定分区上运行。
如果在进一步检查后未对数据集进行任何意外更改,则可以将所记录的1 TB数据简单地解释为BigQuery将数据提取到内存中,作为能够运行查询的一个补充步骤。
但是,要确认是否建议在issue tracker中使用您的BigQuery JobID提交故障单,以便BigQuery工程部门可以正确地检查问题。