HIVE JOIN 两个具有不同行数的表给出错误的列值
Posted
技术标签:
【中文标题】HIVE JOIN 两个具有不同行数的表给出错误的列值【英文标题】:HIVE JOIN two tables with different number of rows giving wrong column values 【发布时间】:2017-08-27 19:33:29 【问题描述】:我对 Hive 比较陌生。探索合并两个不通过键相互连接的表的方法。所以,我没有在查询中使用“ON”条件。
下面是table_1:
COL1
hello
下面是table_2:
COL2
world
excellent
预期结果:
hello world
NULL excellent
实际结果:
hello world
hello excellent
我的查询:
select col_one,
col_two
from (
select COL1 as col_one
from table_1
) as c1
join (
select COL2 as col_two
from table_2
) as c2;
当 table_1 中没有第 2 行时,我不确定结果中的“你好”是如何产生的
【问题讨论】:
因为您正在进行交叉连接 -1 x 2 = 2 rows
。您加入或如您所说的“合并”的标准是什么?通过查看您的数据,似乎没有。
嗨@GurwinderSingh:这些表没有键相关。所以就我而言,我没有给出任何条件。
您不能以这种方式加入。你心里有什么命令吗?也许是按两列的升序排列,然后加入行号?
使用 JOIN 是否可以达到我的预期结果?
哦.. 如果是这样的话。我也会尝试重新审视我的加入条件。感谢您的帮助@GurwinderSingh
【参考方案1】:
如果没有on
子句,我不确定您的查询是如何工作的。但是,您可以使用row_number()
做您想做的事,如下所示:
select c1.col_one, c2.col_two
from (select COL1 as col_one, row_number() over (order by col1) as seqnum
from table_1
) c1 join
(select COL2 as col_two, row_number() over (order by col2) as seqnum
from table_2
) c2
on c1.seqnum = c2.seqnum;
【讨论】:
感谢@Gordon 的建议,我决定编写自己的 mapreduce 代码,因为除了加入表格之外我还需要做很多事情。以上是关于HIVE JOIN 两个具有不同行数的表给出错误的列值的主要内容,如果未能解决你的问题,请参考以下文章