Google bigquery 如果有条件运行计划查询
我正在使用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
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]
运行将创建目标表的计划查询
几分钟后,运行计划查询,检查创建的表是否为空。如果是,该表将被删除
我希望它有助于如果答案帮助你,考虑接受:如果答案帮助你,考虑接受: