У меня есть две таблицы в Hive: empSrc
и empTrg
:
> select * from empSrc;
+---------------+--------------+-------------+--------------+--+
| empsrc.empid | empsrc.dept | empsrc.ph | empsrc.role |
+---------------+--------------+-------------+--------------+--+
| e1 | dev | 9999911111 | SE |
| e2 | admin | 6677889933 | SE |
+---------------+--------------+-------------+--------------+--+
2 rows selected (0.872 seconds)
> select * from empTrg;
+---------------+--------------+-------------+--------------+--------------------+----------------+--+
| emptrg.empid | emptrg.dept | emptrg.ph | emptrg.role | emptrg.dml_action | emptrg.active |
+---------------+--------------+-------------+--------------+--------------------+----------------+--+
| e1 | dev | 9999911111 | SE | I | A |
+---------------+--------------+-------------+--------------+--------------------+----------------+--+
Я хочу найти записи, которые находятся в empSrc
, но отсутствуют в empTrg
.
Мой запрос работает нормально:
select S.* from empSrc S
where S.empid not in (select T.empid from empTrg T);
+----------+---------+-------------+---------+--+
| s.empid | s.dept | s.ph | s.role |
+----------+---------+-------------+---------+--+
| e2 | admin | 6677889933 | SE |
+----------+---------+-------------+---------+--+
Проблема в том, что этот запрос создает перекрестный продукт.
Существует ли какой-либо эквивалентный LEFT OUTER JOIN
запрос, который я могу использовать?
Поможет ли LEFT / RIGHT OUTER JOIN в производительности?
Приведенный выше сценарий является демонстрационным, в реальных данных у меня ~ 12 миллионов записей.