Если условно выполнить запрос по расписанию - PullRequest
0 голосов
/ 15 апреля 2020

Я использую BigQuery. У меня есть запрос-планировщик для генерации таблицы (таблица результатов), которая зависит от другой таблицы (таблица SOURCE). Дело в том, что эта исходная таблица не всегда содержит данные, возможно, эта исходная таблица пуста.

Я хочу запланировать запрос, чтобы сделать RESULT TABLE, только если в SOURCE TABLE есть данные.

Примером будет:

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]

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

В данный момент вы не можете установить таблицу назначения при использовании BigQuery Scripting. Это означает, что решения, основанные на утверждении IF, не будут работать в вашем случае. Кроме того, кажется, что когда вы устанавливаете таблицу назначения, BigQuery создает таблицу до выполнения вашего запроса, что означает, что независимо от результатов будет создана таблица.

Запрос ниже только 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

Подводя итог, можно получить следующее решение:

  1. Запустить запланированный запрос, который создаст таблицу назначения,
  2. Через несколько минут запустите запланированный запрос, который проверит, является ли созданная таблица пустой. Если это так, таблица будет удалена.

Надеюсь, это поможет

1 голос
/ 15 апреля 2020

Синтаксис:

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;

Для получения более подробной информации вы можете прочитать https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting#if

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...