我想比较两个 hive 表(t1和t2)。第二个表还有另外五个不在第一个表中的列。除了五个不相交的字段,两个表应该相同。我试图写一个查询来检查这一点。这是我到目前为止的内容:

SELECT * FROM t1
UNION ALL
select * from t2
GROUP BY some_value
HAVING count(*) == 2

如果表相同,则应返回0条记录。但是,由于第二个表包含5个额外的字段,因此我需要更改第二个select语句以反射(reflect)这一点。几乎有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返回的列的数量和名称必须相同,否则会引发架构错误。

10-07 19:10
查看更多