为啥这个 Hive 代码返回 0 个结果?

Posted

技术标签:

【中文标题】为啥这个 Hive 代码返回 0 个结果?【英文标题】:Why is this Hive code returning 0 results?为什么这个 Hive 代码返回 0 个结果? 【发布时间】:2019-11-07 13:29:55 【问题描述】:
select * 
FROM prd_raw_sf.sf_opportunity_dn A JOIN 
     prd_raw_sf.sf_opportunity_rw B
     ON A.OPPORTUNITYID  = B.SFDC_ID LEFT JOIN
     prd_raw_sf.sf_si_accounts_mapping C
     ON TRIM(UPPER(A.ACCOUNT_NAME)) = TRIM(UPPER(C.sfdc_account_name))
WHERE C.sfdc_account_name IS NULL
and C.Billing_Client in ('CL.00000:')

当我查询到“WHERE C.sfdc_account_name IS NULL”时,它会返回必要的结果。但是,如果我添加最后一行...“and C.Billing_Client in ('CL.00000:')”,它只会返回 0 结果。请帮忙!

【问题讨论】:

为什么?因为JOINWHERE 子句会过滤掉所有结果。 【参考方案1】:

我推测你打算:

SELECT * 
FROM prd_raw_sf.sf_opportunity_dn od JOIN 
     prd_raw_sf.sf_opportunity_rw orw
     ON od.OPPORTUNITYID = orw.SFDC_ID LEFT JOIN
     prd_raw_sf.sf_si_accounts_mapping am
     ON TRIM(UPPER(od.ACCOUNT_NAME)) = TRIM(UPPER(ord.sfdc_account_name)) AND
        am.Billing_Client in ('CL.00000:')
WHERE am.sfdc_account_name IS NULL;

帐户名称不可能是NULLLEFT JOIN 之后,Billing_Client 不可能是NULL 以外的任何其他。那是因为帐户名被用作JOIN 键,所以NULL 不匹配。 NULL 值表示不匹配,因此表中的所有其他列都是NULL

请注意,我还修复了表别名,因此它们是有意义的,而不是任意字母。

【讨论】:

谢谢@Gordon Linoff ...这很有帮助

以上是关于为啥这个 Hive 代码返回 0 个结果?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 MySQL 函数返回 null?

为啥 Regex.Match 只返回 1 个结果?

我在 2 个搜索日期之间检索事件的查询没有返回任何结果,为啥?

为啥会返回这个矛盾的 clojure.core.logic/featurec 结果?

为啥这个计算(除法)会返回错误的结果?

为啥我不能返回 realloc 的结果? (当你看到代码时你会得到问题......)