2016-11-16 2 views
1

У меня есть две таблицы: исключены и kaggleresults. Я пытаюсь найти записи, которые существуют в excluded, но не существуют в kaggleresultsКак получить записи, которые существуют в таблице 1, но не в таблице 2?

подсчетов:

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 записей?

+1

, пожалуйста, сообщите мне общий идентификатор между этими таблицами –

+0

Anthony ваш запрос на исключение выглядит правильно. Вы можете сделать это через левое соединение, как вы это делали, EXISTS или NOT IN, но все должны давать те же результаты, которые вы, вероятно, получили 38, потому что 38 записей не существует. Вы говорите, что 17, но один другой вариант, который может произойти, это записи, которые находятся в kagglersults, которые НЕ исключены, у вас, вероятно, есть 21 запись, подобная той, которая будет означать чистую разницу в 17 – Matt

+0

@ Энтони, пожалуйста, проверьте ниже запрос. Я думаю, это будет работать для вас –

ответ

1

Для действительных записей (не подсчетов), вы можете использовать

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

Однако, вы не должны удивляться, если в результате количество строк не соответствует разности подсчет отдельных строк в двух таблицах.

Например: таблица table1 имеет идентификаторы 1, 2, 3, 4 и 5, а таблица2 имеет идентификаторы 3, 4, 5 и 6. Количество строк таблицы 1 и таблицы 2 равно 5 и 4 соответственно, для разницы в 1, но на самом деле есть две записи в таблице1, которые имеют идентификаторы, которых нет в таблице2.

0

с использованием не в ключевом слове Вы можете использовать приведенный ниже запрос

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

Это не случай для 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| 
+-----+ 
Смежные вопросы