【问题标题】:Comparing Similar Hive Tables比较相似的 Hive 表
【发布时间】: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


【解决方案1】:

您应该使用UNION DISTINCT 来表示您正在应用的逻辑。

但是,每个select_statement 返回的列的数量和名称必须相同,否则会引发架构错误。

【讨论】:

    【解决方案2】:

    您可以查看这个处理 Hive 表比较(比较所有行和所有列)的 Python 程序,并会在网页中向您显示可能出现的差异:https://github.com/bolcom/hive_compared_bq

    要跳过 5 个额外字段,您可以使用“--ignore-columns”选项。

    【讨论】:

      猜你喜欢
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 2011-04-11
      • 1970-01-01
      • 2011-08-09
      • 2012-04-08
      相关资源
      最近更新 更多