我有问题,蜂箱离开了外接。
我在sql-server中有al表。然后使用sqoop迁移蜂窝上的所有表。
这是来自sql-server的原始查询,其中包含非equi左外部联接。这两个表都有笛卡尔数据。
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;*
原始查询在Server上提供了1162条记录,但是这个单元查询提供了46240条记录。为了得到相同的逻辑,我尝试了多种方法,但在蜂箱上却没有得到相同的结果。
请你帮我找出这个问题,让查询用相同的结果集处理蜂巢。
告诉我你需要其他细节。
发布于 2018-09-26 08:48:23
Hive不允许在ON语句中使用<=或>=来比较表中的列。
这里有一个摘录自蜂巢手册
Version 2.2.0+:ON子句中的复杂表达式
支持ON子句中的复杂表达式,从Hive2.2.0开始(参见HIVE-15211,HIVE-15251)。在此之前,Hive不支持不平等的联接条件。
特别是,联接条件的语法限制如下:
join_condition:
ON equality_expression ( AND equality_expression )*
equality_expression:
expression = expression
还可以将此作为替代:非马左外加入蜂巢解决方案
https://stackoverflow.com/questions/52124915
复制相似问题