我花了一些时间和资源来运行和验证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亿“陈旧”。
作为一种解决方法,确实可以对“陈旧”和“新”分别运行查询并将它们存储在自己的表中。