当您的数据在列中为空时,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)
从今天开始,我在 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)