Google bigquery BigQuery标准SQL在左连接上将null自动替换为零

Google bigquery BigQuery标准SQL在左连接上将null自动替换为零,google-bigquery,Google Bigquery,我正在使用BigQuery中的两个表,它们大致遵循以下格式: t1 t2 。。。我需要执行左连接。注意,t2中的名称与t1中的名称不同,当我执行t2到t1的左连接时,我希望num2为零,而不是null SELECT t1.p1, t1.num, t2.num FROM t1 LEFT JOIN t2 ON t1.p1 = t2.pi 我知道IFNULL函数,但是我更愿意避免以下解决方案: SELECT t1.p1, t1.num, IFNULL(t2.num, 0) FROM t1

我正在使用BigQuery中的两个表,它们大致遵循以下格式:

t1

t2

。。。我需要执行左连接。注意,t2中的名称与t1中的名称不同,当我执行t2到t1的左连接时,我希望num2为零,而不是null

SELECT 
  t1.p1, t1.num, t2.num
FROM t1
LEFT JOIN t2 ON t1.p1 = t2.pi
我知道IFNULL函数,但是我更愿意避免以下解决方案:

SELECT 
  t1.p1, t1.num, IFNULL(t2.num, 0)
FROM t1
LEFT JOIN t2 ON t1.p1 = t2.p1
这是因为我有一个非常大的查询,有~5个左连接和~50个列,对于所有50个列,空值都应该替换为零。我注意到,当我用IFNULLt2.num,0替换select中的所有t2.num行时,BigQuery明显滞后

我希望避免在列级别解决问题的解决方案,例如50列需要IFNULLs,并且更希望在5个表的左连接级别解决null值

如果您对此有任何想法,我们将不胜感激

编辑:对于为什么50个IFNULLs落后于BigQuery编辑器,我们将不胜感激。通过延迟编辑器,我的字面意思是,当我尝试在查询编辑器中键入内容时,我键入的内容需要几秒钟才能显示出来。IFNULLs不会改变查询处理的数据量~1GB,所以我很惊讶它们造成了如此多的延迟。了解这个问题可以帮助我将来编写更好的查询


EDIT2:我现在意识到我共享的代码示例没有帮助。请让我知道一个较长的代码示例是否有助于解决此问题

不确定我是否遇到了您的根本问题-但您可能希望探索下面的选项/方向这消除了IFNULL的使用,但与简单示例中的情况相比,为更多的左连接构建额外的联合all需要付出额外的努力

#standardSQL
SELECT t1.p1, t1.num num1, t2.num num2
FROM t1 JOIN t2 ON t1.p1 = t2.p1 
UNION ALL
SELECT p1, num, 0 FROM t1 WHERE NOT EXISTS (
  SELECT 1 FROM t2 WHERE p1 = t1.p1
)
当应用于问题中的样本数据时-结果为

Row p1  num1    num2     
1   tim 20      0    
2   joe 25      15   
3   tom 35      13   

您对COALESCEt2.num、0有相同的问题吗?只是检查一下:我会给它一个try@MikhailBerlyant使用COALESCE和IFNULL时,它似乎同样滞后
#standardSQL
SELECT t1.p1, t1.num num1, t2.num num2
FROM t1 JOIN t2 ON t1.p1 = t2.p1 
UNION ALL
SELECT p1, num, 0 FROM t1 WHERE NOT EXISTS (
  SELECT 1 FROM t2 WHERE p1 = t1.p1
)
Row p1  num1    num2     
1   tim 20      0    
2   joe 25      15   
3   tom 35      13