【问题标题】:is there any optimised way to write SQL query to find difference between two data-sets?是否有任何优化的方法来编写 SQL 查询来查找两个数据集之间的差异?
【发布时间】:2019-10-02 17:19:53
【问题描述】:

以下是查询和示例数据集(实际数据集很大并且位于 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

【问题讨论】:

  • join 应该没问题。你有什么问题?
  • 您是否正在寻找来自 SET-1 且在 SET-2 中不可用的数据?
  • FULL JOIN 允许在两个表中找到差异:stackoverflow.com/a/42490123/2700344

标签: sql apache-spark hive hiveql


【解决方案1】:

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

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

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

很遗憾,此功能在 spark-sql 或 Imala/Hive 中不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 2019-01-20
    • 1970-01-01
    • 2022-07-01
    • 2021-07-25
    • 2021-04-29
    相关资源
    最近更新 更多