在 Google BigQuery 中插入数据时,如果你想避免插入重复记录,可以使用多种方法来实现这一目标。以下是几种常见的方法:
MERGE
语句MERGE
语句允许你根据某些条件合并数据,从而避免插入重复记录。假设你有一个目标表 target_table
和一个源表 source_table
,并且你希望根据某个唯一键(例如 id
)来避免重复记录。
MERGE target_table T
USING source_table S
ON T.id = S.id
WHEN MATCHED THEN
UPDATE SET T.column1 = S.column1, T.column2 = S.column2
WHEN NOT MATCHED THEN
INSERT (id, column1, column2) VALUES (S.id, S.column1, S.column2)
INSERT
和 SELECT
语句结合 DISTINCT
如果你只是想插入不重复的记录,可以使用 INSERT
和 SELECT
语句结合 DISTINCT
来实现。
INSERT INTO target_table (id, column1, column2)
SELECT DISTINCT id, column1, column2
FROM source_table
INSERT
和 SELECT
语句结合 EXCEPT
你可以使用 EXCEPT
子句来选择那些在目标表中不存在的记录。
INSERT INTO target_table (id, column1, column2)
SELECT id, column1, column2
FROM source_table
EXCEPT DISTINCT
SELECT id, column1, column2
FROM target_table
INSERT
和 SELECT
语句结合 LEFT JOIN
你可以使用 LEFT JOIN
来选择那些在目标表中不存在的记录。
INSERT INTO target_table (id, column1, column2)
SELECT S.id, S.column1, S.column2
FROM source_table S
LEFT JOIN target_table T
ON S.id = T.id
WHERE T.id IS NULL
假设你有以下两个表:
target_table
:目标表,包含现有数据。source_table
:源表,包含要插入的数据。CREATE TABLE target_table (
id INT64,
column1 STRING,
column2 STRING
);
CREATE TABLE source_table (
id INT64,
column1 STRING,
column2 STRING
);
INSERT INTO target_table (id, column1, column2)
VALUES (1, 'A', 'B'), (2, 'C', 'D');
INSERT INTO source_table (id, column1, column2)
VALUES (2, 'C', 'D'), (3, 'E', 'F');
MERGE
语句避免重复记录MERGE target_table T
USING source_table S
ON T.id = S.id
WHEN MATCHED THEN
UPDATE SET T.column1 = S.column1, T.column2 = S.column2
WHEN NOT MATCHED THEN
INSERT (id, column1, column2) VALUES (S.id, S.column1, S.column2);
INSERT
和 SELECT
语句结合 DISTINCT
INSERT INTO target_table (id, column1, column2)
SELECT DISTINCT id, column1, column2
FROM source_table;
INSERT
和 SELECT
语句结合 EXCEPT
INSERT INTO target_table (id, column1, column2)
SELECT id, column1, column2
FROM source_table
EXCEPT DISTINCT
SELECT id, column1, column2
FROM target_table;
INSERT
和 SELECT
语句结合 LEFT JOIN
INSERT INTO target_table (id, column1, column2)
SELECT S.id, S.column1, S.column2
FROM source_table S
LEFT JOIN target_table T
ON S.id = T.id
WHERE T.id IS NULL;
领取专属 10元无门槛券
手把手带您无忧上云