【发布时间】:2019-12-08 01:44:54
【问题描述】:
我正在寻找一种通用方法来比较 BigQuery 中的两个表,即使它们具有 STRUCT 类型的列。
它应该适用于任何一对表,并且理想情况下不会涉及编写依赖于表的实际列的查询。我真正需要知道的是表是否相等,但如果它可以显示不同行之间的差异,那将是一个奖励。
类似(在伪代码中)
sizeOf( TABLE A EXCEPT TABLE B ) == 0
或
Hash(TABLE A) == HASH(TABLE B)
会好的。
我试过用这个:
( SELECT * FROM table1
EXCEPT DISTINCT
SELECT * FROM table2)
UNION ALL
( SELECT * FROM table2
EXCEPT DISTINCT
SELECT * FROM table1)
但是我收到了这个错误。
Column 1 in EXCEPT ALL has type that does not support set operation comparisons: STRUCT at [3:5]
有人知道解决这个问题的方法吗?
编辑
之前应该提到过,但是无论表格行的顺序如何,我都需要它来工作。
【问题讨论】:
-
你不能比较数组和结构类型,首先你需要将它们转换为字符串,例如转换为json字符串
to_json_string(<your_struct_column>)
标签: sql google-bigquery comparison difference set-difference