问题描述
我正在尝试合并 BigQuery 中的两个表。出于解释的目的,让我们将这两个表命名为 A 和 B。因此,我们将 B 合并到 A 中。此外,我有一个名为 id 的主键,我将根据它执行合并。现在,它们都有一个类型为 ARRAY 的列(为了便于说明,我们将其命名为 X)。如果两个表中的数组不相等,我的主要目的是将 A 中的数组数据替换为 B 中的数组数据。我怎样才能做到这一点。我确实在 SO 和其他网站上找到了帖子,但没有一个在我的用例中有效。
A B
---------- ----------
id | x id | x
---------- ----------
1 | [1,2] 1 | [1,2]
---------- ----------
2 | [3] 2 | [4,5]
合并的结果应该是
A
----------
id | x
----------
1 | [1,2]
----------
2 | [4,5]
我怎样才能达到上述结果。任何线索都会非常有帮助。另外,如果有其他帖子直接解决上述情况,请指点我
编辑:
我尝试了以下方法:
merge A as main_table
using B as updated_table
on main_table.id = updated_taable.id
when matched and main_table.x != updated_table.x then update set main_table.x = updated_table.x
when not matched then
insert(id,x) values (updated_table.id,updated_table.x)
;
希望,这会有所帮助。
解决方法
我不能直接在数组上使用比较运算符。我的用例是仅在值不相等时才更新值。所以,我不能直接使用 != 之类的东西。这是主要问题
您可以使用 to_json_string
函数“直接”比较两个数组
to_json_string(main_table.x) != to_json_string(updated_table.x)