Импала / Hive Query Multiple Join условие - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть требование сгруппировать результаты из tableA_index, а затем объединить его с таблицей B, чтобы получить следующие результаты.

  • количество tb2_c1, присутствующих как в tableA_index, так и в tableB

  • количество tb2_c1, присутствующих только в таблицеA_index

  • количество tb2_c1, присутствующих только в таблице B

Окончательный результат должен выглядеть примерно так:

c3 | c1 | common_c1s | tableA_only_c1s | tableB_only_c1s 
   |    |            |                 |    
   |    |            |                 |

Я пробовал приведенное ниже решение в Impala, но по какой-то причине это не работает.

   select 
      ures.c3 c3, ures.c1 c1, count(t1.tb2_c1) common_c1s, count(t2.tb2_c1) tableA_only_c1s, count(t3.tb2_c1) tableB_only_c1s 
      from (
        select c1, c2, c3 from tableA_0 
        UNION
        select c1, c2, c3 from tableA_1
        UNION
        select c1, c2, c3 from tableA_2 
        UNION
        select c1, c2, c3 from tableA_3
        UNION
        select c1, c2, c3 from tableA_4
        UNION
        select c1, c2, c3 from tableA_5 
        ) ures 
        INNER JOIN 
        ( select tb2_c1, tb2_c2 from tableB ) t1
        ON t1.tb2_c1 = ures.c2
        AND t1.tb2_c2 = ures.c3 
        LEFT SEMI JOIN
        ( select tb2_c1, tb2_c2 from tableB ) t2
        ON t2.tb2_c1 = ures.c2
        AND t2.tb2_c2 = ures.c3 
        LEFT ANTI JOIN
        ( select tb2_c1, tb2_c2 from tableB ) t3
        ON t3.tb2_c1 = ures.c2
        AND t3.tb2_c2 = ures.c3 
      GROUP BY c3, c1
...