Есть ли оптимизированный способ написания SQL-запроса, чтобы найти разницу между двумя наборами данных? - PullRequest
0 голосов
/ 15 мая 2019

Ниже приведен запрос и пример набора данных (фактический набор данных огромен и находится в HDFS). Я пытаюсь найти разницу в наборе данных 1 с помощью следующего запроса.Есть ли лучший способ добиться этого без использования объединения, если это возможно?

SELECT
      dt1.name,
      dt1.code,
      dt1.day
FROM
    dt1
    LEFT OUTER JOIN dt2 ON (dt1.name = dt2.name AND dt1.code = dt2.code AND dt1.day = dt2.day)
WHERE
    dt2.name IS NULL AND dt2.code IS NULL AND dt2.day IS NULL

Ниже приведен набор данных

Data SET 1

name  code  day

a     1001  2019-01-01
a     1002  2019-01-02
a     1003  2019-01-01
b     2001  2019-01-01
b     2002  2019-01-02
b     2003  2019-01-03

найти комбинацию кода имени набора данных 1, котораяне найден в наборе данных 2 за данный день

Data SET 2
name  code  day

a     1001  2019-01-01
b     1002  2019-01-01
a     1003  2019-01-01
d     2001  2019-01-01
e     2002  2019-01-01
b     2003  2019-01-01

1 Ответ

0 голосов
/ 15 мая 2019

Используйте Dataset.except (если ваши данные дублировались , исключая все )

val result = dt1.except(dt2)  // Ensure that dt1 and dt2 have the same columns

предупреждение : убедитесь, что оба набора данных имеют одинаковый порядок столбцов, иначе вы получите неправильный результат (вместо правильного исключения).

К сожалению, эта функция недоступна в spark-sql или Imala / Hive.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...