【发布时间】:2019-10-30 04:35:12
【问题描述】:
我正在使用 BigQuery 中的两个表,它们大致遵循以下格式:
t1
p1 num1
joe 25
tom 35
tim 20
t2
p1 num2
joe 15
tom 13
... 我需要执行左连接。请注意,t2 中的名称与 t1 中的名称不同,当我在 t1 上执行 t2 的左连接时,我希望 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 列,空值应该全部替换为零。我注意到当我用IFNULL(t2.num, 0) 替换选择中的所有t2.num 行时,BigQuery 明显滞后。
我想避免在列级别解决问题的解决方案(例如,需要 IFNULL 的 50 列),并且更喜欢在左连接级别解决空值的解决方案(对于 5 个表)。
对此的任何想法将不胜感激!
编辑: 任何关于 50 个 IFNULL 为何落后于 BigQuery 编辑器的想法将不胜感激。通过滞后编辑器,我的字面意思是当我尝试在查询编辑器中输入时,我输入的内容需要几秒钟才能出现。 IFNULL 不会改变查询处理的数据量(~1GB),所以我很惊讶它们造成了如此多的延迟。了解这个问题可以帮助我在未来编写更好的查询。
EDIT2:我现在意识到我分享的代码示例没有帮助。请让我知道更长的代码示例是否有助于解决问题。
【问题讨论】:
-
你和
COALESCE(t2.num, 0)有同样的“问题”吗?只是检查:o) -
会试一试
-
@MikhailBerlyant 使用
COALESCE和IFNULL似乎同样滞后
标签: google-bigquery