Google BigQuery 中 MERGE 语句的性能?



我想知道 BigQuery 是如何执行 MERGE 语句的,与简单地覆盖整个表相比,它的性能如何?

例如,如果我有一个大文件,只有几行更新/删除/添加,那么用更新的数据填充临时表并将其与旧表合并是否更有意义?还是简单地覆盖整个表?

谢谢!

合并比覆盖目标表要高效得多,但为了获得最大的性能和成本收益,您需要遵循一些基本建议:

分区修剪:此策略涉及通过限制扫描的分区数来最小化对目标(和源(表的扫描。下面是一个示例 SQL 代码:

BEGIN
-- First, find relevant dates (assuming you have date partition) in the source table.
DECLARE date_list ARRAY<DATE>;
SET date_list = (
SELECT ARRAY_AGG(DISTINCT partition_dates_colum)
FROM source_table
-- Add extra conditions here.
);
-- Now execute your merge statement with this list to limit partition scan over the target table.
MERGE target_table T
USING source_table S
ON T.key = S.key AND T.launch_date IN UNNEST(date_list)
WHEN MATCHED THEN UPDATE
SET T.value = S.value
WHEN NOT MATCHED THEN
INSERT (key, value, launch_date) VALUES (S.key, S.value, S.launch_date);
END;
    第二种策略是将
  1. 目标表与合并的"ON"条件中的列聚类是第二种策略。此策略可以提高性能并限制扫描,从而节省大量时间和金钱。

我希望这个答案对你有所帮助。

最新更新