【问题标题】:How to get records that exist in table 1 but not in table 2?如何获取表1中存在但表2中不存在的记录?
【发布时间】:2017-03-31 01:36:35
【问题描述】:

我有两个表:excluded 和 kagglerresults。我正在尝试查找excluded 中存在但kaggleresults 中不存在的记录

计数:

scala> spark.sql("select * from excluded").count()
res136: Long = 4652

scala> spark.sql("select * from kaggleresults").count()
res137: Long = 4635

区别是17

scala> res136-res137
res139: Long = 17

我正在尝试获取那 17 条记录。我在下面编写了查询,但它返回38

scala> spark.sql("select * from excluded left join kaggleresults on kaggleresults.subject_id = excluded.subject_id where kaggleresults.subject_id is null").count()
res135: Long = 38

问题

我需要编写什么查询来获取这 17 条记录?

【问题讨论】:

  • 请告诉我这些表之间的共同ID
  • Anthony 您的排除查询看起来正确。您可以像您所做的那样通过左连接来完成,EXISTS 或 NOT IN 但都应该产生与您可能得到 38 相同的结果,因为 38 条记录不存在。您说的是 17,但可能发生的另一种变化是 kagglersults 中未被排除的记录,您可能有 21 条这样的记录,这意味着净差异为 17
  • @Anthony 请检查以下查询,我认为它对您有用

标签: sql apache-spark apache-spark-sql


【解决方案1】:

难道不是LEFT_ANTI加入的情况吗?

scala> val excluded = (0 to 5).toDS
left: org.apache.spark.sql.Dataset[Int] = [value: int]

scala> val kaggleresults = (3 to 10).toDS
right: org.apache.spark.sql.Dataset[Int] = [value: int]

scala> excluded.join(kaggleresults, Seq("value"), "leftanti").show
+-----+
|value|
+-----+
|    0|
|    1|
|    2|
+-----+

【讨论】:

    【解决方案2】:

    对于实际记录(不是计数),您可以使用

    SELECT * FROM excluded
    WHERE subject_id NOT IN ( SELECT subject_id FROM kaggleresults )
    

    但是,如果生成的行数与两个表的单独行数的差异不匹配,您不应感到惊讶。

    例如:假设 table1 的 id 为 1、2、3、4 和 5,table2 的 id 为 3、4、5 和 6。table1 和 table2 的行数分别为 5 和 4,对于相差 1,但实际上 table1 中有 两条 记录具有 table2 中不存在的 id。

    【讨论】:

    • 当我做类似的事情时,当我在 spark.sql 中有 mismatched input 'FROM' expecting <EOF>(line 1, pos 64) 错误时,我该如何解决?
    【解决方案3】:

    Not In 语法与子查询一起使用。

    SELECT ID, Name 
    FROM   Table1 
    WHERE  ID NOT IN (SELECT ID FROM Table2)
    

    SQL query to find record with ID not in another table

    【讨论】:

      【解决方案4】:

      在关键字中使用 not 您可以使用以下查询

      Select * from excluded where subject_id not in (select subject_id from  kaggleresults)
      

      【讨论】:

        猜你喜欢
        • 2017-04-07
        • 2017-11-03
        • 2014-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-03
        • 1970-01-01
        相关资源
        最近更新 更多