Google bigquery 如果有条件运行计划查询

Google bigquery 如果有条件运行计划查询,google-bigquery,Google Bigquery,我正在使用BigQuery。我有一个查询调度器来生成依赖于另一个表(源表)的表(结果表)。情况是,这个源表并不总是有数据,有可能这个源表是空的 我希望仅当源表中有数据时,安排查询生成结果表 例如: IF COUNT(1) FROM data.source_table > 0 THEN RUN: SELECT * FROM data.source_table LEFT JOIN data.other_source_table ELSE [Don't Run] 提前感谢语法是 IF co

我正在使用BigQuery。我有一个查询调度器来生成依赖于另一个表(源表)的表(结果表)。情况是,这个源表并不总是有数据,有可能这个源表是空的

我希望仅当源表中有数据时,安排查询生成结果表

例如:

IF COUNT(1) FROM data.source_table > 0 THEN RUN:

SELECT *
FROM data.source_table
LEFT JOIN data.other_source_table

ELSE [Don't Run]
提前感谢

语法是

IF condition THEN [sql_statement_list]
[ELSEIF condition THEN sql_statement_list]
[ELSEIF condition THEN sql_statement_list]...
[ELSE  sql_statement_list]
END IF;
所以你的情况是

IF COUNT(1) FROM data.source_table > 0 
THEN 

SELECT *
FROM data.source_table
LEFT JOIN data.other_source_table;

END IF;
有关详细信息,请阅读

语法为

IF condition THEN [sql_statement_list]
[ELSEIF condition THEN sql_statement_list]
[ELSEIF condition THEN sql_statement_list]...
[ELSE  sql_statement_list]
END IF;
所以你的情况是

IF COUNT(1) FROM data.source_table > 0 
THEN 

SELECT *
FROM data.source_table
LEFT JOIN data.other_source_table;

END IF;

有关详细信息,您可以在使用
BigQuery脚本时无法设置目标表时阅读。这意味着基于
IF
语句的解决方案将不适用于您的案例。 除此之外,在设置目标表时,
BigQuery
似乎会在执行查询之前创建表,这意味着将独立于结果创建表

SELECT
  *
FROM
  UNNEST( 
    (SELECT
      (
        CASE (SELECT COUNT(1) FROM data.source_table) > 0
        WHEN TRUE 
        THEN ( 
             SELECT ARRAY( 
                           SELECT AS STRUCT *
                           FROM data.source_table
                           LEFT JOIN data.other_source_table)
        )
        END
      )
   )
)
下面的查询只是SQL。换句话说,它不包含脚本。如果使用它创建计划查询并设置目标表,您将看到即使子查询未运行,也会创建空表

SELECT
  *
FROM
  UNNEST( 
    (SELECT
      (
        CASE (SELECT COUNT(1) FROM data.source_table) > 0
        WHEN TRUE 
        THEN ( 
             SELECT ARRAY( 
                           SELECT AS STRUCT *
                           FROM data.source_table
                           LEFT JOIN data.other_source_table)
        )
        END
      )
   )
)
作为一种解决方法,您可以保留现有的计划查询,并创建另一个计划查询,如下所示,以便在第一个查询后运行几分钟:

IF (SELECT count(1) FROM `dataset.destination_table`) = 0
THEN DROP TABLE `dataset.destination_table`;
END IF
总之,您的解决方案是:

IF COUNT(1) FROM data.source_table > 0 THEN RUN:

SELECT *
FROM data.source_table
LEFT JOIN data.other_source_table

ELSE [Don't Run]
  • 运行将创建目标表的计划查询
  • 几分钟后,运行计划查询,检查创建的表是否为空。如果是,该表将被删除

  • 我希望它能帮助您在使用
    BigQuery脚本时设置目标表。这意味着基于
    IF
    语句的解决方案将不适用于您的案例。 除此之外,在设置目标表时,
    BigQuery
    似乎会在执行查询之前创建表,这意味着将独立于结果创建表

    SELECT
      *
    FROM
      UNNEST( 
        (SELECT
          (
            CASE (SELECT COUNT(1) FROM data.source_table) > 0
            WHEN TRUE 
            THEN ( 
                 SELECT ARRAY( 
                               SELECT AS STRUCT *
                               FROM data.source_table
                               LEFT JOIN data.other_source_table)
            )
            END
          )
       )
    )
    
    下面的查询只是SQL。换句话说,它不包含脚本。如果使用它创建计划查询并设置目标表,您将看到即使子查询未运行,也会创建空表

    SELECT
      *
    FROM
      UNNEST( 
        (SELECT
          (
            CASE (SELECT COUNT(1) FROM data.source_table) > 0
            WHEN TRUE 
            THEN ( 
                 SELECT ARRAY( 
                               SELECT AS STRUCT *
                               FROM data.source_table
                               LEFT JOIN data.other_source_table)
            )
            END
          )
       )
    )
    
    作为一种解决方法,您可以保留现有的计划查询,并创建另一个计划查询,如下所示,以便在第一个查询后运行几分钟:

    IF (SELECT count(1) FROM `dataset.destination_table`) = 0
    THEN DROP TABLE `dataset.destination_table`;
    END IF
    
    总之,您的解决方案是:

    IF COUNT(1) FROM data.source_table > 0 THEN RUN:
    
    SELECT *
    FROM data.source_table
    LEFT JOIN data.other_source_table
    
    ELSE [Don't Run]
    
  • 运行将创建目标表的计划查询
  • 几分钟后,运行计划查询,检查创建的表是否为空。如果是,该表将被删除

  • 我希望它有助于

    如果答案帮助你,考虑接受:如果答案帮助你,考虑接受: