【问题标题】:Conditional logic in BigQuery scriptsBigQuery 脚本中的条件逻辑
【发布时间】:2020-01-28 23:46:47
【问题描述】:

我正在尝试编写一个 BigQuery 语句/脚本:

  1. 检查 table_a 是否存在
  2. 如果table_a存在,则从table_a中选择col_1、col_2、col_3
  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 中的保存视图)。

提前致谢。

【问题讨论】:

    标签: google-bigquery


    【解决方案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 语句,但我还没有尝试过。
    猜你喜欢
    • 2012-05-17
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    相关资源
    最近更新 更多