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
中实现减号逻辑。谢谢,
萨拉瓦南
https://www.linkedin.com/in/saravanan303/
最佳答案
如果表具有相同的列,则可以使用except
中的DataSet
方法:
fullTable.except(stageTable)
如果它们没有,但您仅对两个表中都存在的列子集感兴趣,则可以先使用
select
转换选择这些列,然后再使用except
:val fullTableSelectedColumns = fullTable.select(c1,c2,c3)
val stageTableSelectedColumns = stageTable.select(c1,c2,c3)
fullTableSelectedColumns.except(stageTableSelectedColumns)
在其他情况下,可以使用
join
和filter
转换:fullTable
.join(stageTable, fullTable("primary_key") === stageTable("primary_key"), "left")
.filter(stageTable("primary_key1").isNotNull)
关于scala - 负逻辑实现不适用于spark/scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44642403/