【问题标题】:Except command not working in databrick sql (spark sql)除了在databricks sql(spark sql)中不起作用的命令
【发布时间】:2020-12-29 17:31:17
【问题描述】:

我已经写了这个除了查询来从 databricks 笔记本的两个 hive 表中获取记录的差异。(我试图在 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')

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

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

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

【问题讨论】:

    标签: hive hiveql databricks azure-databricks databricks-connect


    【解决方案1】:

    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 函数应用于所有列来尝试不区分大小写的测试,例如

    【讨论】:

    • 对于列名,我们是否需要使用别名保持相同的列名。或者我们可以按正确的顺序保留任何东西。
    • like - select contactid,name from tablea 除了 select idno,clientname from tableb;可以吗?
    • 列名不必相同。
    • 好吧。让我试试,因为在再次尝试小写之后,我得到了不同的匹配记录。
    猜你喜欢
    • 1970-01-01
    • 2016-07-08
    • 2011-11-27
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    相关资源
    最近更新 更多