应该在 bigquery 中提取不匹配的记录

Posted

技术标签:

【中文标题】应该在 bigquery 中提取不匹配的记录【英文标题】:unmatched records should be pulled in the bigquery 【发布时间】:2021-05-21 12:10:49 【问题描述】:

所需的结果集:

在下面的查询中,我正在获取按旧表和源表分组的记录,如果值匹配,则比较结果,然后我的标志列将填充匹配 但我希望输出中也有不匹配的记录(附件中的 HTC 产品不存在于源表中,因此该记录未填充)我的结果中也需要 HTC - 请帮助

查询框:

with legacy as (select product,sum(premium) as premium_l,reportdate
from Tab_legacy
group by product,reportdate),

source as (select product,sum(premium) as premium_s,reportdate
from Tab_src
group by product,reportdate)

select legacy.product,legacy.premium_l,source.premium_s,
case when legacy.premium_l = source.premium_s then 'match' else 'unmatch' end as match_flg,
round((legacy.premium_l - source.premium_s )/source.premium_s,2) as Diff,
source.reportdate
from legacy join source
on legacy.reportdate = source.reportdate
and legacy.product = source.product

【问题讨论】:

【参考方案1】:

你可以使用full join:

with legacy as (
      select product, sum(premium) as premium_l, reportdate
      from Tab_legacy
      group by product, reportdate
     ),
     source as (
      select product, sum(premium) as premium_s, reportdate
      from Tab_src
      group by product, reportdate
     )
select product, reportdate, legacy.premium_l, source.premium_s,
       (case when legacy.premium_l = source.premium_s
             then 'match' else 'unmatch'
        end) as match_flg,
       round((legacy.premium_l - source.premium_s )/source.premium_s,2) as Diff,
source.reportdate
from legacy full join
     source
     using (reportdate, product);

注意变化:

full join 而不是 joinusing 而不是 on。这使得在select 中包含键值变得更容易(否则您需要coalesce() 逻辑)。 reportdateselect 中。它是join 的一部分,因此您应该包含它。

【讨论】:

以前的记录计数 4,但现在我看到 5 条记录,但我只看到第 5 条记录的所有列的空值 Product reportdate Legacy premium Source premium Match Flg Diff NULL NULL Null NULL Unmatch NULL 对于那个不匹配的记录我得到的只有 null 值没有得到产品名称作为 HTC 和相应的溢价值 - 请建议跨度> @Ram。 . . all 列不应有NULL 值。特别是,前两个不应该是NULL——除非你的数据中有NULLs。

以上是关于应该在 bigquery 中提取不匹配的记录的主要内容,如果未能解决你的问题,请参考以下文章

Big Query 匹配表之间的记录

应用电子商务操作过滤器时,Big Query 和 Google Analytics UI 不匹配

要在本地机器中提取为 JSON 的 Big Query 表

如何重命名 Big Query 中的列? [关闭]

第二次使用 Dataflow 从 Big Query 中提取数据的问题 [apache beam]

Big Query 不接受 EMOJI