BigQuery 脚本中的条件逻辑
Posted
技术标签:
【中文标题】BigQuery 脚本中的条件逻辑【英文标题】:Conditional logic in BigQuery scripts 【发布时间】:2020-01-28 23:46:47 【问题描述】:我正在尝试编写一个 BigQuery 语句/脚本:
-
检查 table_a 是否存在
如果table_a存在,则从table_a中选择col_1、col_2、col_3
如果table_a不存在,则从table_b中选择col_1、col_2、col_3
我知道如何做第 1 步:
select count(1) cnt from `project.dataset.__TABLES_SUMMARY__`
WHERE table_id = 'table_a'
感谢这篇文章: BigQuery check if table exists or not
但是,我无法完成剩下的工作。我试过了:
if (select count(1) cnt from `project.dataset.__TABLES_SUMMARY__`
WHERE table_id = 'table_a')=1
select col_1, col_2, col_3 from table_a
也试过了:
if (select count(1) cnt from `project.dataset.__TABLES_SUMMARY__`
WHERE table_id = 'table_a')=1
then
select col_1, col_2, col_3 from table_a
这两个都失败了。 在标准 SQL 中,选择语句之外的这种条件逻辑是否可行?
(显然在 select 子句中,我可以使用 case 语句,但是当我想根据条件更改要查询的表时,我不知道如何在此处使用它。而且我可以将语句包装在 Python 代码中并将条件放在那里,但我试图避免使用包装器,因为我希望将查询用作 BQ 中的保存视图)。
提前致谢。
【问题讨论】:
【参考方案1】:以下内容对我有用:
DECLARE table_count int64;
set table_count = (select count(*) from dataset.INFORMATION_SCHEMA.TABLES where table_name = 'table_a');
if table_count >= 1 then (select col_1,col_2,col_3 from dataset.table_a);
else (select col_1,col_2,col_3 from dataset.table_b);
end if;
【讨论】:
谢谢,这似乎可行,尽管它在我运行它时返回两组结果的列表 - “set table_count”的一个无用结果和一个所需的结果。我需要手动单击“查看结果”以获得最终结果,这使得它很难插入任何类型的 ETL 甚至 BQ 视图。抱歉,这可能是个愚蠢的问题 - 你知道如何只返回最终结果,而不需要点击它吗? 我其实不确定;这可能需要一个关于处理 BQ 脚本结果的新问题。要创建视图/表,您可能可以在if/else
逻辑中添加 CREATE
语句,但我还没有尝试过。以上是关于BigQuery 脚本中的条件逻辑的主要内容,如果未能解决你的问题,请参考以下文章
六十八shell脚本中的逻辑判断文件目录属性判断if特殊用法case判断
20.5shell脚本中的逻辑判断20.6文件目录属性判断20.7-9if特殊用法 case判断