我有两个hive表(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
语法,但有没有办法进行此查询而不必明确命名我希望包含在最终结果中的每一列?
答案 0 :(得分:0)
您应该使用UNION DISTINCT
作为您正在应用的逻辑。
但是,每个select_statement
返回的列的数量和名称必须相同,否则会引发架构错误。
答案 1 :(得分:0)
你可以看看这个Python程序来处理Hive表的比较(比较所有行和所有列),并会在网页中显示可能出现的差异:https://github.com/bolcom/hive_compared_bq
要跳过5个额外字段,您可以使用" - ignore-columns"选项。