Мне трудно писать HiveQL Join - PullRequest
0 голосов
/ 06 сентября 2018

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

**Table Online**
Col1   Col2    Score   |
a      b       1       |
a      c       2       |
a      d       3       |
f      e       4       |

**Table Offline**
Col1   Col2    Score   |
a      m       10      |
a      c       20      |
a      d       30      |
t      k       40      |


**Table Output**
Col1  Col2  Online.Score  Offline.Score    |
a     c     2             20               |    
a     d     3             30               |
a     b     1                              |
a     m                   10               |

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Вы можете сделать это с помощью full join:

select coalesce(onl.col1, ofl.col1) as col1,
       coalesce(onl.col2, ofl.col2) as col2,
       onl.score, ofl.score
from (select onl.*
      from online onl
      where onl.col1 = 'a'
     ) onl full join
     (select ofl.*
      from offline ofl
      where ofl.col1 = 'a'
     ) ofl
     on onl.col1 = ofl.col1 and onl.col2 = ofl.col2;

Фильтрация сложна с full join, поэтому здесь используется подзапрос.

0 голосов
/ 06 сентября 2018

Используйте запрос ниже!

SELECT online.col1
    ,online.col2
    ,coalesce(online.score, 0) AS onlinescore
    ,coalesce(offlilne.score, 0) AS offlinescore
FROM online
INNER JOIN offline
    ON online.col1 = offline.col1
    AND online.col2 = offline.col2
UNION ALL
SELECT online.col1
    ,online.col2
    ,coalesce(online.score, 0) AS onlinescore
    ,'' AS offlinescore
FROM online
LEFT JOIN offline
    ON online.col1 = offline.col1
    AND online.col2 = offline.col2
WHERE offline.col1 IS NULL
UNION ALL
SELECT offline.col1
    ,offline.col2
    ,'' AS onlinescore
    ,coalesce(offline.score, 0) AS offlinescore
FROM offline
LEFT JOIN online
    ON online.col1 = offline.col1
    AND online.col2 = offline.col2
WHERE online.col1 IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...