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 两个具有不同行数的表给出错误的列值的主要内容,如果未能解决你的问题,请参考以下文章

在R中组合两个具有不同行数的数据框[重复]

Python Pandas - 连接两个具有不同行数和列数的数据框

具有不同行数的 Scikit Learn 特征联合

Python读取具有不同行数的csv文件

Hive 查询优化总结

Hive 查询优化总结