【发布时间】:2019-01-15 16:19:44
【问题描述】:
要求是使用 id 列连接两个表,此外,如果获取的名称值具有另一个具有不同 id 的记录,则还应获取该记录。就像下面的截图一样。
输出:
要求
- 表 B 的大小为 TB。两个表的单连接将是 最好的
- 查询需要在 hive 上执行
【问题讨论】:
-
同名记录可以多于2条吗?
-
它可以有更多的记录。桌子很大。
要求是使用 id 列连接两个表,此外,如果获取的名称值具有另一个具有不同 id 的记录,则还应获取该记录。就像下面的截图一样。
输出:
要求
【问题讨论】:
我不熟悉 HiveQL,但对于常规 SQL,您需要将表 B 第二次连接到自身作为查询的一部分。
select
b_name.id, b_name.name
from
#table_A a
join #table_B b -- This table gets the "name" value for lookup
on (a.id=b.id)
join #table_B b_name -- This is the table you want to pull your "output" from
on (b.name=b_name.name)
这个查询本质上是说你需要在表B中找到“name”列的值,在表A中有一个匹配的ID,然后在表B中查找所有具有该name值的行。
【讨论】:
您可以多次加入同一张表。因此,在下面的查询中,b1 将为您提供 A 中 id 的所有名称,b2 按名称连接,以获取不在 A 中的所有额外 id。
select
b2.*
from
A
inner join B b1 on b1.id = A.id
inner join B b2 on b2.name = b1.name
【讨论】: