BigQuery Merge-使用DELETE子句扩展查询的大小

时间:2019-02-08 03:32:39

标签: merge google-bigquery

尝试执行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

1 个答案:

答案 0 :(得分:2)

根据您提供的查询,将合并应用于整个数据集是不正常的行为。查询运行后,您应该分析数据集并检查其有效性,以确保查询仅在特定分区上运行。

如果在进一步检查后未对数据集进行任何意外更改,则可以将所记录的1 TB数据简单地解释为BigQuery将数据提取到内存中,作为能够运行查询的一个补充步骤。

但是,要确认是否建议在issue tracker中使用您的BigQuery JobID提交故障单,以便BigQuery工程部门可以正确地检查问题。