我在发出蜂巢左外连接问题。
我在sql-server中有一个表。然后使用sqoop迁移上的所有表 蜂巢。
这是来自sql-server的原始查询,其中包含非等号的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;*
原始查询在Sql-Server上给出了1162条记录,但是此配置单元查询 提供了46240条记录。 我尝试了多种解决方法以获取相同的逻辑,但未获得相同的结果 在蜂巢上。
您能在这方面帮助我确定问题并获得查询吗 在具有相同结果集的配置单元上。
让我知道您需要其他详细信息。
答案 0 :(得分:0)
Hive不允许在ON语句中使用<=或> =来比较表中的列。
以下是Hive Manual的摘录:
版本2.2.0+:ON子句中的复杂表达式
从Hive 2.2.0开始,支持ON子句中的复杂表达式(请参阅HIVE-15211,HIVE-15251)。在此之前,Hive不支持不是相等条件的联接条件。
特别是,连接条件的语法受到如下限制:
join_condition:
ON equality_expression ( AND equality_expression )*
equality_expression:
expression = expression