Hive:不在Hive中工作

mfuanj7w  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(342)

我有一个问题,Hive离开外部连接。
我在sql server中有一个al表。然后使用sqoop迁移配置单元上的所有表。
这是来自sql server的原始查询,其中包含非等左外部联接。两个表都有笛卡尔数据。

  1. SELECT
  2. vss.company_id,vss.shares_ship_id,vss.seatmap_cd,vss.cabin,vss.seat,
  3. vss.seat_loc_dscr, vss.ep_seat AS EPlus_Seat, vss.ep_win_seat,
  4. vss.ep_asle_seat, vss.ep_mid_seat, vss.em_win_seat,
  5. vss.em_mid_seat,vss.em_asle_seat,vss.y_win_seat, vss.y_mid_seat,
  6. vss.y_asle_seat, vss.fj_win_seat, vss.fj_mid_seat,
  7. vss.fj_asle_seat,vss.exit_row, vss.bulkhead_row, vss.eff_dt, vss.disc_dt
  8. FROM rvsed11 zz
  9. LEFT OUTER JOIN rvsed22 vss
  10. ON zz.company_id = vss.company_id
  11. AND zz.shares_ship_id = vss.shares_ship_id
  12. AND *zz.report_dt >= vss.eff_dt *
  13. AND *zz.report_dt < vss.disc_dt*;
  14. As we know that Nonequi joins are not working in hive ( Nonequi joins
  15. working in WHERE clause but we cannot use with LEFT OUTER JOIN).
  16. See below hive query with noon-equi condition moved to where clause.
  17. SELECT
  18. vss.company_id,vss.shares_ship_id,vss.seatmap_cd,vss.cabin,vss.seat,
  19. vss.seat_loc_dscr, vss.ep_seat AS EPlus_Seat, vss.ep_win_seat,
  20. vss.ep_asle_seat, vss.ep_mid_seat, vss.em_win_seat,
  21. vss.em_mid_seat,vss.em_asle_seat,vss.y_win_seat, vss.y_mid_seat,
  22. vss.y_asle_seat, vss.fj_win_seat, vss.fj_mid_seat,
  23. vss.fj_asle_seat,vss.exit_row, vss.bulkhead_row, vss.eff_dt, vss.disc_dt
  24. FROM rvsed11 zz
  25. LEFT OUTER JOIN rvsed22 vss
  26. ON zz.company_id = vss.company_id
  27. AND zz.shares_ship_id = vss.shares_ship_id
  28. * WHERE zz.report_dt >= vss.eff_dt AND zz.report_dt < vss.disc_dt;*

原始查询在SQLServer上提供1162条记录,但此配置单元查询提供46240条记录。我尝试了多种解决方法来获得相同的逻辑,但在hive上没有得到相同的结果。
你能在这方面帮助我确定这个问题,并让查询在具有相同结果集的配置单元上工作吗。
告诉我你还需要其他细节。

deyfvvtc

deyfvvtc1#

配置单元不允许在on语句中使用<=或>=来比较表中的列。
以下是Hive手册的摘录:
版本2.2.0+:on子句中的复杂表达式
支持on子句中的复杂表达式,从hive 2.2.0开始(请参阅hive-15211、hive-15251)。在此之前,配置单元不支持非相等条件的连接条件。
特别是,联接条件的语法限制如下:

  1. join_condition:
  2. ON equality_expression ( AND equality_expression )*
  3. equality_expression:
  4. expression = expression

也可以将此视为另一种解决方案:在配置单元中使用非等左外部联接

相关问题