检查 BigQuery 合并语句中的两个数组是否完全相同

问题描述

我正在尝试合并 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)    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...