【发布时间】:2015-01-12 21:08:23
【问题描述】:
我有两个要比较的配置单元表(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 语法,但是有没有一种方法可以执行此查询,而不必明确命名我希望包含在最终结果中的每一列?
【问题讨论】:
-
第一个查询中的所有记录不是都有计数 == 2 吗?如果表相同,则每一行都将重复。 UNION ALL 不会删除任何重复项。
-
是的,你是对的。结果应与原始行数具有相同的计数
标签: hadoop compare hive hdfs hiveql