【发布时间】:2017-11-22 08:51:03
【问题描述】:
Hive 中的减法逻辑:
下面的 (Hive) 查询将只返回左侧表 (Full_Table ft) 中可用的记录,但不会返回两者。
Select ft.* from Full_Table ft left join Stage_Table stg where stg.primary_key1 IS null and stg.primary_key2 IS null
我尝试使用以下方法在spark/scala 中实现相同的方法(以同时支持主键和复合键),但加入的结果集没有来自右表的column,因此无法在加入的结果集中应用stg.primary_key2 IS null 条件。
ft.join(stg,usingColumns, “left_outer”) // used seq to support composite key column join
请建议我如何在 spark scala 中实现减号逻辑。
【问题讨论】:
-
喜欢只比较几个关键列,喜欢从左右表中选择所有列,但除了会考虑所有匹配的列,这不是预期的输出。有关详细信息,请参阅 Hive 查询。
-
我已经修复了以下连接查询:val result = ft.join (stg, columnList.length match { case 2 => ft(columnList(0)) equalTo stg(columnList(0))和 ft(columnList(1))=== stg(columnList(1)) 案例 3 => ft(columnList(0)) 等于 stg(columnList(0)) 和 ft(columnList(1))=== stg( columnList(1)) 和 ft(columnList(2))=== stg(columnList(2)) 案例 1 => ft(columnList(0)) equalTo stg(columnList(0)) }, "left_outer").where (stg(columnList(0)).isNull) .select(targetTable + ".*") .unionAll(stg)
标签: scala hadoop apache-spark join spark-dataframe