当您的数据在列中为空时,Big Query 过滤器出现问题

Problem with Big Query filters when your data has a null in a column

从今天开始,我在 Google Big Query 中遇到了一个奇怪的问题。以下查询 returning 没有记录。昨天没看到这个问题

WITH Q1 AS (SELECT 'XC1' AS XC , NULL AS NU 
UNION ALL
SELECT 'XC2' AS XC , 'TAB' AS NU )

SELECT * FROM Q1
WHERE NU != 'TAB'

理想情况下,它应该显示 XC = XC1 的记录,但它不会 return 任何记录。

你们都面临同样的问题吗?当我们在其他领域面临更大的问题时,请尽快通知我们。

你能告诉我这是怎么回事吗?

您正在寻找空安全比较。在标准 SQL 中,您通常会使用运算符 IS [NOT] DISTINCT FROM:

SELECT * FROM Q1 WHERE NU IS DISTINCT FROM 'TAB'

不幸的是,很少有数据库支持这种语法,BQ 不是其中之一。所以我们需要求助于一个条件表达式:

SELECT * FROM Q1 WHERE NU IS NULL OR NU != 'TAB'

BigQuery 没有 NULL 安全运算符。不过它确实有类似的方法:

where not ((nu = 'TAB') is false)

我承认 or 解决方案可能更清晰。

解决 BigQuery Standard SQL 这种情况的另一种选择是

WHERE IFNULL(NU != 'TAB', TRUE)