我想比较两个蜂巢表(t1 和 t2)。第二个表有 5 个不在第一个表中的附加列。除了五个不相交的字段之外,这两个表应相同。我正在尝试编写一个查询来检查这一点。这是我到目前为止所拥有的:
SELECT * FROM t1
UNION ALL
select * from t2
GROUP BY some_value
HAVING count(*) == 2
如果表相同,则应返回 0 条记录。但是,由于第二个表包含 5 个额外的字段,我需要更改第二个 select 语句以反映这一点。有将近 60 个列名,所以我真的很讨厌这样写:
SELECT * FROM t1
UNION ALL
select field1, field2, field3,...,fieldn from t2
GROUP BY some_value
HAVING count(*) == 2
我环顾四周,我知道没有select * EXCEPT
语法,但是有没有办法执行此查询,而不必明确命名我想包含在最终结果中的每列?
对要应用的逻辑使用UNION DISTINCT
。
但是,每个select_statement
返回的列的数量和名称必须相同,否则将引发架构错误。
看看这个Python程序,它处理Hive表的这种比较(比较所有行和所有列),并在网页中向你显示可能出现的差异:https://github.com/bolcom/hive_compared_bq
要跳过 5 个额外的字段,您可以使用"--忽略列"选项。