Получение разницы между наборами строк из таблиц Hive - PullRequest
0 голосов
/ 31 марта 2020

У меня есть две таблицы Hive: Table1, Table2. Таблица1 содержит повторяющиеся строки, а Таблица2 - нет. Я хочу получить недостающие данные из Таблицы1, которых нет в Таблице2, включая дубликаты. Как я могу сделать это на языке запросов Hive?

Пример:

Данные таблицы 1:

Col1,Col2
A1,V1
A1,V1
A2,V2
A3,V3
A3,V3
A3,V3
A4,V4

Данные таблицы 2:

Col1,Col2
A1,V1
A2,V2
A3,V3

I хотите получить следующие отсутствующие данные из таблицы 1:

Col1,Col2
A1,V1
A3,V3
A3,V3
A4,V4

1 Ответ

1 голос
/ 31 марта 2020

вы можете использовать что-то вроде:

with t1 as (
  select 'A1' col1,'V1' col2 union all
  select 'A1' col1,'V1' col2 union all
  select 'A2' col1,'V2' col2 union all
  select 'A3' col1,'V3' col2 union all
  select 'A3' col1,'V3' col2 union all
  select 'A3' col1,'V3' col2 union all
  select 'A4' col1,'V4' col2
),
t2 as (
  select 'A1' col1,'V1' col2 union all
  select 'A2' col1,'V2' col2 union all
  select 'A3' col1,'V3' col2
),
t1_with_rn as (
  select t1.*, row_number() over(partition by t1.col1, t1.col2) rn from t1
)
select 
  t1_with_rn.col1, t1_with_rn.col2
from 
  t1_with_rn
  left join t2 on (t1_with_rn.col1 = t2.col1 and t1_with_rn.col2 = t2.col2 and t1_with_rn.rn = 1)
where
  t2.col1 is null and t2.col2 is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...