当我在SPARK(2.0)中执行该查询时,没有随机读/写并且在40分钟内挂起以执行该查询。
SELECT * FROM A WHERE A.key1 NOT IN ( SELECT B.key1 from B ) AND A.key2 NOT IN (SELECT B.key2 from B )
这只是一个写作的动作。
Dataset<Row> re = Operation.project(ss, var, A, B);
re.write()
.format("jdbc")
.option("driver", "var.Driver")
.option("url", var.url)
.option("dbtable", var.tablename)
.option("user", var.username)
.option("password", var.password)
.save();
A和B中的记录数小于100,000。 所以,我认为这个查询有问题。 但是这个查询只花了30秒。(它也是写动作)
SELECT * FROM A WHERE (A.key1, A.key2) IN ( SELECT B.key1, B.key2 FROM B )
通过仅更改&#39;而不是&#39;不会解决问题。查询?
答案 0 :(得分:1)
AFAIK NOT IN在sql中很昂贵。
由于您使用的是数据帧(Dataset<Row>
),您可以保留sql并尝试使用数据帧连接(因为它有自己的好处(小数据帧将被广播,因此它会很快)
我认为你必须在这种情况下申请左反联接...... 这意味着......
返回左侧没有匹配项的所有记录 从右边开始。结果表只有左侧的列 侧。
请参阅joinTypes此处..