我有3个非常大的表*的ip地址,并试图计数的数量共同的ip之间的3个表。我考虑过使用联接和子查询来查找这3个表之间IP的交集。如何用一个查询找到所有3个表的交集?
这是不正确的语法,但说明了我要实现的目标:
SELECT COUNT(DISTINCT(a.ip)) FROM a, b, c WHERE a.ip = b.ip = c.ip
我已经看到了关于如何连接3个表的其他答案,但是对于hive和这个比例都没有。
- 注意事项:
表a:70亿行
表b:18亿行
表c:1.68亿行
“表”实际上是由s3支持的配置单元元存储。
每个表中都有许多重复的IP
欢迎提出绩效建议。
如果使用sparksql而不是hive是一个更好的主意,那么也可以运行sparksql查询。
2条答案
按热度按时间5lwkijsr1#
正确的语法是:
这可能在我们有生之年不会结束。更好的方法是:
我承认
sum(which) = 6
只是说三者都存在。因为select distinct
在子查询中,您只需执行以下操作:vyu0f0g12#
简单的解决方案:
这将不仅为您提供有关3个表交集(in_a=1、in_b=1、in_c=1)的信息,而且还提供有关所有其他组合的信息:
... 还有更多信息: