除了命令在 databrick sql (spark sql) 中不起作用

问题描述

我写了这个,除了查询以从 databricks notebook 中获取两个配置单元表的记录差异。(我试图获得我们在 mssql 中获得的结果,即结果集的唯一差异)

select PreqinContactID,PreqinContactName,PreqinPersonTitle,EMail,City 
  from preqin_7dec.PreqinContact where filename='InvestorContactPD.csv'
except
  select CONTACT_ID,NAME,JOB_TITLE,EMAIL,CITY 
  from preqinct.InvestorContactPD where contact_id in (
    select PreqinContactID from preqin_7dec.PreqinContact 
    where filename='InvestorContactPD.csv')

enter image description here

但是返回的结果集也有匹配的记录。我上面显示的记录出现在结果集中,但是当我根据 contact_id 单独检查它时它是相同的。所以我不知道为什么除了返回匹配也记录一下。

只是想知道我们如何使用 sql 在 databrick notebook 中使用 except 或任何差异查找命令。

如果源数据和目标数据相同,我不想在结果集中看到任何内容

解决方法

EXCEPT 在 Databricks 中运行良好,这个简单的测试将显示:

val df = Seq((3445256,"Avinash Singh","Chief Manager","asingh@gmail.com","Mumbai"))
  .toDF("contact_id","name","job_title","email","city")


// Save the dataframe to a temp view
df.createOrReplaceTempView("tmp")
df.show

SQL 测试:

%sql
SELECT *
FROM tmp
EXCEPT 
SELECT *
FROM tmp;

此查询不会产生任何结果。例如,您是否可能有一些前导或尾随空格? Spark 也区分大小写,因此这也可能导致您的问题。通过对所有列应用 LOWER 函数来尝试不区分大小写的测试,例如

Results