使用“不在”子句时,BigQuery查询无效地返回“无结果”

时间:2019-07-01 07:05:48

标签: google-bigquery

我花了一些时间和资源来运行和验证BigQuery中的一个简单查询,结果为零。我肯定知道该查询应该给我结果,所以我想知道为什么会这样以及它是否吞下了某种错误。 我知道我在查询中犯错误的可能性更高,但是我与其他人多次核对了这个错误,但确实看不出我的错误可能在哪里。

我们有我们的表 audit_v3.mutations ,其中包含约250亿条审核记录。 这些记录具有必填字段 sourceId 和必填字段,称为 deltaStatus ,其值可以为“ new”,“ stale”或“ delta”。

从功能上讲,我们不希望在没有“新”记录的情况下存在给定sourceId的“陈旧”记录,但是我们确实发现了这种情况,例如

SELECT
  deltaStatus
FROM
  `project.audit_v3.mutations`
WHERE
  sourceId = '497786711'

结果:

stale
stale
stale
stale
stale
stale

但是当我们要检查这种情况发生的总频率时:

SELECT
  sourceId
FROM
  `project.audit_v3.mutations`
WHERE
  WHERE deltaStatus = "stale"
  AND sourceId NOT IN (
  SELECT
    sourceId
  FROM
    `project.audit_v3.mutations`
  WHERE
    deltaStatus = "new" )

此查询会导致 无结果 ,即使我们知道,它至少应返回sourceId'497786711'。

我的猜测是,查询实际上在水下某处失败,因为“ not in”子句太大,但是我期望结果是错误而不是“ No results”。作为参考,有230亿“新”记录和15亿“陈旧”。

作为一种解决方法,确实可以对“陈旧”和“新”分别运行查询并将它们存储在自己的表中。

0 个答案:

没有答案