BigQuery MERGE 查询:根据条件合并表
BigQuery MERGE Query: Merge tables based on condition
我在 BigQuery 中使用 MERGE 查询,发现我无法根据条件更新特定行。
例如,我在 table 中已经有 5 条记录。我只想更新两个值已更改的记录。当我执行以下查询时,所有行都会更新。这意味着我不想更改 3 个记录中的 5 个值。我会尽快收到应该更改现有记录的新值。
MERGE `test.organization_user` T
USING `test.user_details` S
ON T.user_id = S.user_id
WHEN MATCHED AND
(
T.organization <> S.organization OR
T.contact_number <> S.contact_number
)
THEN
UPDATE
SET
T.organization = S.organization,
T.contact_number = S.contact_number
WHEN NOT MATCHED THEN
INSERT ROW
对于这种情况是否有任何解决方案,或者使用合并将更新所有匹配的记录,如果我们不想更新现有记录,那么我们是否应该为这些记录中的所有字段设置值源 table(从哪个值将更新到目标 table)?
一个例子是:
你应该在以下条件下处理 null:-
MERGE `test.organization_user` T
USING `test.user_details` S
ON T.user_id = S.user_id
WHEN MATCHED AND
(
IFNULL(T.organization,'') <> IFNULL(S.organization,'') OR
IFNULL(T.contact_number,0) <> IFNULL(S.contact_number,0)
)
THEN
UPDATE
SET
T.organization = S.organization,
T.contact_number = S.contact_number
WHEN NOT MATCHED THEN
INSERT ROW
我在 BigQuery 中使用 MERGE 查询,发现我无法根据条件更新特定行。 例如,我在 table 中已经有 5 条记录。我只想更新两个值已更改的记录。当我执行以下查询时,所有行都会更新。这意味着我不想更改 3 个记录中的 5 个值。我会尽快收到应该更改现有记录的新值。
MERGE `test.organization_user` T
USING `test.user_details` S
ON T.user_id = S.user_id
WHEN MATCHED AND
(
T.organization <> S.organization OR
T.contact_number <> S.contact_number
)
THEN
UPDATE
SET
T.organization = S.organization,
T.contact_number = S.contact_number
WHEN NOT MATCHED THEN
INSERT ROW
对于这种情况是否有任何解决方案,或者使用合并将更新所有匹配的记录,如果我们不想更新现有记录,那么我们是否应该为这些记录中的所有字段设置值源 table(从哪个值将更新到目标 table)?
一个例子是:
你应该在以下条件下处理 null:-
MERGE `test.organization_user` T
USING `test.user_details` S
ON T.user_id = S.user_id
WHEN MATCHED AND
(
IFNULL(T.organization,'') <> IFNULL(S.organization,'') OR
IFNULL(T.contact_number,0) <> IFNULL(S.contact_number,0)
)
THEN
UPDATE
SET
T.organization = S.organization,
T.contact_number = S.contact_number
WHEN NOT MATCHED THEN
INSERT ROW