2017-01-05 6 views
1

Я новичок в Hive, и мои знания SQL немного ржавые, поэтому отправляю вопрос на SO.Улей: заполнить отсутствующие колонки

У меня есть данные из одной таблицы SAP, в которой отсутствуют значения для одного столбца. Я хотел бы знать, как я могу заполнить эти столбцы.

Пример:

+----------+-----------+--------+ 
| EBELN | BELNR  | EBELP | 
|----------+-----------+--------| 
| 1  | 123  | 001 | 
|----------+-----------+--------| 
|   | 123  | 002 | 
|----------+-----------+--------| 
|   | 123  | 003 | 
+----------+-----------+--------+ 

В приведенной выше таблице, все три строки связаны друг с другом, но значение для столбца EBELN присутствует только в первой строке.

Когда я присоединяюсь к этой таблице с другой таблицей, используя столбец EBELN в качестве ключа соединения, в join появляется только первая строка. Я хочу привести все три строки в выходное соединение.

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 | 
    +----------+-----------+--------+ 

Я пытался присоединиться к «ABCD» таблицы с таблицей «EKPF» с помощью EBELN колонки.

мне нужно, чтобы получить все строки, где BELNR число такое же, но с тех пор BELNR столбец не присутствует в таблице ABCD, я не могу использовать его для соединения.

Final присоединился выход должен выглядеть

+----------+-----------+--------+--------+--------+ 
    | 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

Как связаны строки? по колонке BELNR? Как рассчитывать столбец EBELN? – leftjoin

+0

Вы можете использовать самоподключение или другой метод для расчета EBELN, но сначала вам необходимо определить правило. – leftjoin

+0

Привет, Спасибо за ваше драгоценное время. Я обновил детали вопроса, чтобы отразить то, что я намереваюсь сделать. – Shekhar

ответ

0

Из улья вы можете использовать один из Conditional Functions функции для достижения Вашего выхода.

Просто сделать это, если с помощью COALSCE:

SELECT COALESCE(EBELN, 1L) AS EBELN, BELNR,EBELP FROM your_table; 

Кроме того, из улья 0,11 года вы можете использовать NVL Функция

SELECT NVL(EBELN, 1) AS EBELN, BELNR,EBELP FROM your_table; 
0

Если вы хотите для всех записей из первой (левой) таблицы в создайте соответствующую запись в результате, даже если во второй таблице (RIGHT) нет совпадения, вы используете соединение 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 | 
+----------+-----------+--------+--------+--------+