BigQuery — вызов запроса при вставке в таблицу

#google-cloud-platform #google-bigquery

#google-cloud-platform #google-bigquery

Вопрос:

Вот мой пример использования.

Новый CSV-файл загружается в корзину GCS, затем данные вставляются в таблицу BigQuery, после того, как данные находятся в BigQuery, запрос постобработки должен быть запущен при событии insert.

Для реализации первого шага я создал облачную функцию на Python, которая загружает данные из корзины GCS в таблицу BigQuery.

Я борюсь со вторым шагом, поскольку BigQuery не поддерживает понятие триггеров БД.

Прямо сейчас я использую запланированные запросы, что не идеально, поскольку оно выполняется, даже если базовая таблица не изменяется.

Я не хочу использовать composer из-за связанных с этим затрат, я ищу простое экономичное решение.

Ответ №1:

Для этого может быть несколько способов. Два простых могут быть:

  1. Вы можете использовать ту же облачную функцию, которая загружает данные из GCS-> BQ, для выполнения дополнительного запроса по завершении загрузки.
  2. Из вашей облачной функции вы можете установить уникальный идентификатор в некотором типе очереди (Pub / Sub, Redis, RabbitMQ и т. Д.), Который опрашивается одним из ваших процессов через определенные промежутки времени, И, увидев любую новую запись, он может выполнить запрос последующей обработки. Таким образом, второй процесс не запускает запрос BQ вслепую и всегда запускается, когда видит новую запись в очереди. Вы можете прочитать о том, как опубликовать сообщение Pub / Sub здесь . Другим вашим процессом может быть задание cron или просто другая облачная функция, которую вы можете запускать по требованию, когда захотите.
  3. Другим вариантом (более примитивным) может быть отправка крошечного файла JSON в некоторую папку GCS, содержащую что-то вроде {"status": True} , после завершения загрузки данных в BQ. А затем привяжите другую облачную функцию для запуска запроса BQ после обработки, как только новый файл будет помещен в эту папку корзины GCS.

Комментарии:

1. Спасибо за предложение, не могли бы вы рассказать о втором способе, используя Pub / Sub.

2. Я добавил некоторые детали.

3. В конце концов я последовал вашему первому предложению добавить код к существующей облачной функции, и это оказалось именно тем, что я искал.

Ответ №2:

В качестве дополнительной опции для рассмотрения:

Ваша облачная функция при загрузке данных может отправить некоторое сообщение (возможно, с некоторыми соответствующими деталями, если требуется) в тему PubSub (это займет несколько миллисекунд) — вы модифицируете свою облачную функцию таким образом и создаете тему PubSub для этой цели.

С другой стороны этого раздела есть еще одна облачная функция, которая запускается автоматически. Вы можете разработать эту облачную функцию и реализовать любую необходимую вам функциональность.