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
中实现减去逻辑。
谢谢, Saravanan https://www.linkedin.com/in/saravanan303/
答案 0 :(得分:0)
如果您的表格具有相同的列,则可以使用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)