我是Hive的新手,我的SQL知识有点生疏,因此在SO上发布了问题。
我有一个SAP表中的数据,其中缺少一列的值。我想知道如何填充这些列。
示例:
+----------+-----------+--------+
| EBELN | BELNR | EBELP |
|----------+-----------+--------|
| 1 | 123 | 001 |
|----------+-----------+--------|
| | 123 | 002 |
|----------+-----------+--------|
| | 123 | 003 |
+----------+-----------+--------+
在上表中,所有三行都相互关联,但EBELN
列的值仅出现在第一行。
当我使用EBELN
列作为连接键将此表与其他表连接时,只有第一行出现在连接中。我希望将所有三行都放在输出连接中。
Expected output:
+----------+-----------+--------+
| EBELN | BELNR | EBELP |
|----------+-----------+--------|
| 1 | 123 | 001 |
|----------+-----------+--------|
| 1 | 123 | 002 |
|----------+-----------+--------|
| 1 | 123 | 003 |
+----------+-----------+--------+
我希望输出是这样的,这样我就可以使用EBELN
列将此表与其他表联系起来。
我加入的表格不包含BELNR
或EBELP
列,因此我无法使用这些列进行加入。
我想知道我是否可以使用self join
或者我还可以使用其他任何内容。
添加更多信息。我有其他表让我们称之为“ABCD”。该表格有EBELN
列。
+----------+-----------+--------+
| EBELN | COL12 | COL13 |
|----------+-----------+--------|
| 1 | ABC | LMN |
|----------+-----------+--------|
| 2 | DEF | OPQ |
|----------+-----------+--------|
| 3 | GHI | RST |
+----------+-----------+--------+
我试图使用EBELN
列将此“ABCD”表与“EKPF”表联系起来。
我需要获取BELNR
数字相同的所有行,但由于BELNR
表中不存在ABCD
列,我无法将其用于加入。
最终加入的输出应该看起来像
+----------+-----------+--------+--------+--------+
| EBELN | BELNR | EBELP | COL12 | COL13 |
|----------+-----------+--------+--------+--------|
| 1 | 123 | 001 | ABC | LMN |
|----------+-----------+--------+--------+--------|
| | 123 | 002 | ABC | LMN |
|----------+-----------+--------+--------+--------|
| | 123 | 003 | ABC | LMN |
|----------+-----------+--------+--------+--------|
| 2 | | | DEF | OPQ |
|----------+-----------+--------+--------+--------|
| 3 | | | GHI | RST |
+----------+-----------+--------+--------+--------+
答案 0 :(得分:0)
从Hive中,您可以使用其中一个Conditional Functions函数来实现输出。
如果使用COALSCE,只需执行此操作:
SELECT COALESCE(EBELN, 1L) AS EBELN, BELNR,EBELP FROM your_table;
同样从Hive 0.11开始,您可以使用NVL功能
SELECT NVL(EBELN, 1) AS EBELN, BELNR,EBELP FROM your_table;
答案 1 :(得分:0)
如果您希望第一个(LEFT)表中的所有记录在结果中生成相应的记录,即使第二个(右侧)表中没有匹配,您也可以使用LEFT
连接。对于相反的情况,一个使用RIGHT
加入。由于您希望保留联接两侧的记录,因此需要FULL OUTER
加入。
SELECT COALESCE(t1.EBELN, t2.EBELN), t1.BELNR, t1.EBELP ,
t2.COL12, t2.COL13
FROM EKPF t1
FULL OUTER JOIN ABCD t2 ON t1.EBELN = t2.EBELN
COALESCE
这里保证您将填充连接列(根据您的示例)。
输出结果为:
+----------+-----------+--------+--------+--------+
| EBELN | BELNR | EBELP | COL12 | COL13 |
|----------+-----------+--------+--------+--------|
| 1 | 123 | 001 | ABC | LMN |
|----------+-----------+--------+--------+--------|
| | 123 | 002 | ABC | LMN |
|----------+-----------+--------+--------+--------|
| | 123 | 003 | ABC | LMN |
|----------+-----------+--------+--------+--------|
| 2 | | | DEF | OPQ |
|----------+-----------+--------+--------+--------|
| 3 | | | GHI | RST |
+----------+-----------+--------+--------+--------+