Улей: неравенство не работает в улей - PullRequest
0 голосов
/ 01 сентября 2018

У меня проблема с крапивницей.

У меня была таблица в sql-сервере. затем использовал sqoop для переноса всех таблиц на улей.

Это оригинальный запрос от sql-сервера, который содержит неравный LEFT НАРУЖНОЕ СОЕДИНЕНИЕ. обе таблицы имеют декартовых данных .

SELECT
   vss.company_id,vss.shares_ship_id,vss.seatmap_cd,vss.cabin,vss.seat,
vss.seat_loc_dscr, vss.ep_seat AS EPlus_Seat, vss.ep_win_seat,
vss.ep_asle_seat, vss.ep_mid_seat, vss.em_win_seat,
   vss.em_mid_seat,vss.em_asle_seat,vss.y_win_seat, vss.y_mid_seat,
vss.y_asle_seat, vss.fj_win_seat, vss.fj_mid_seat,
vss.fj_asle_seat,vss.exit_row, vss.bulkhead_row, vss.eff_dt, vss.disc_dt
FROM rvsed11 zz
LEFT OUTER JOIN rvsed22 vss
   ON zz.company_id = vss.company_id
   AND zz.shares_ship_id = vss.shares_ship_id
   AND *zz.report_dt >= vss.eff_dt *
   AND *zz.report_dt < vss.disc_dt*;

As we know that Nonequi joins are not working in hive ( Nonequi joins
working in WHERE clause but we cannot use with LEFT OUTER JOIN).

See below hive query with noon-equi condition moved to where clause.

SELECT
   vss.company_id,vss.shares_ship_id,vss.seatmap_cd,vss.cabin,vss.seat,
vss.seat_loc_dscr, vss.ep_seat AS EPlus_Seat, vss.ep_win_seat,
vss.ep_asle_seat, vss.ep_mid_seat, vss.em_win_seat,
   vss.em_mid_seat,vss.em_asle_seat,vss.y_win_seat, vss.y_mid_seat,
vss.y_asle_seat, vss.fj_win_seat, vss.fj_mid_seat,
vss.fj_asle_seat,vss.exit_row, vss.bulkhead_row, vss.eff_dt, vss.disc_dt
FROM rvsed11 zz
LEFT OUTER JOIN rvsed22 vss
   ON zz.company_id = vss.company_id
   AND zz.shares_ship_id = vss.shares_ship_id

*WHERE zz.report_dt >= vss.eff_dt AND zz.report_dt < vss.disc_dt;*

Исходный запрос дает 1162 записей на Sql-Server, но этот запрос улья давая 46240 записей. Я попытался несколько обходных путей, чтобы получить ту же логику, но не получил тот же результат в улье.

Не могли бы вы помочь мне в этом, чтобы идентифицировать эту проблему и заставить запрос работать в улье с тем же набором результатов.

Дайте мне знать, что вам нужны другие детали.

1 Ответ

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

Hive не позволяет использовать <= или> = в операторе ON для сравнения столбцов в таблице.

Вот отрывок из Улей Руководство :

Версия 2.2.0+: сложные выражения в предложении ON

Поддерживаются сложные выражения в предложении ON, начиная с Hive 2.2.0 (см. HIVE-15211, HIVE-15251). До этого Hive не поддерживал условия объединения, которые не являются условиями равенства.

В частности, синтаксис для условий соединения был ограничен следующим образом:

join_condition:
    ON equality_expression ( AND equality_expression )*
equality_expression:
    expression = expression

Также смотрите это как альтернативу: Неэквивалентно Левое внешнее соединение в обходе улья

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...