有没有优化的方法来编写SQL查询以查找两个数据集之间的差异?

时间:2019-05-15 14:12:31

标签: sql apache-spark hive hiveql

以下是查询和样本数据集(实际数据集巨大并且位于HDFS中) 我正在尝试通过以下查询找出数据集1中的差异。 如果可能的话,有没有更好的方法而不使用join?

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

查找给定日期在数据集2中找不到的数据集1的名称代码组合

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 :(得分:0)

使用Dataset.except(如果您的数据重复了exceptAll

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

警告:确保两个数据集具有相同的列顺序,否则会产生错误的结果(而不是适当的异常)。

不幸的是,此功能在spark-sql或Imala / Hive中不可用。