#google-cloud-platform #google-bigquery
#google-cloud-platform #google-bigquery
Вопрос:
Вот мой пример использования.
Новый CSV-файл загружается в корзину GCS, затем данные вставляются в таблицу BigQuery, после того, как данные находятся в BigQuery, запрос постобработки должен быть запущен при событии insert.
Для реализации первого шага я создал облачную функцию на Python, которая загружает данные из корзины GCS в таблицу BigQuery.
Я борюсь со вторым шагом, поскольку BigQuery не поддерживает понятие триггеров БД.
Прямо сейчас я использую запланированные запросы, что не идеально, поскольку оно выполняется, даже если базовая таблица не изменяется.
Я не хочу использовать composer из-за связанных с этим затрат, я ищу простое экономичное решение.
Ответ №1:
Для этого может быть несколько способов. Два простых могут быть:
- Вы можете использовать ту же облачную функцию, которая загружает данные из GCS-> BQ, для выполнения дополнительного запроса по завершении загрузки.
- Из вашей облачной функции вы можете установить уникальный идентификатор в некотором типе очереди (Pub / Sub, Redis, RabbitMQ и т. Д.), Который опрашивается одним из ваших процессов через определенные промежутки времени, И, увидев любую новую запись, он может выполнить запрос последующей обработки. Таким образом, второй процесс не запускает запрос BQ вслепую и всегда запускается, когда видит новую запись в очереди. Вы можете прочитать о том, как опубликовать сообщение Pub / Sub здесь . Другим вашим процессом может быть задание cron или просто другая облачная функция, которую вы можете запускать по требованию, когда захотите.
- Другим вариантом (более примитивным) может быть отправка крошечного файла JSON в некоторую папку GCS, содержащую что-то вроде
{"status": True}
, после завершения загрузки данных в BQ. А затем привяжите другую облачную функцию для запуска запроса BQ после обработки, как только новый файл будет помещен в эту папку корзины GCS.
Комментарии:
1. Спасибо за предложение, не могли бы вы рассказать о втором способе, используя Pub / Sub.
2. Я добавил некоторые детали.
3. В конце концов я последовал вашему первому предложению добавить код к существующей облачной функции, и это оказалось именно тем, что я искал.
Ответ №2:
В качестве дополнительной опции для рассмотрения:
Ваша облачная функция при загрузке данных может отправить некоторое сообщение (возможно, с некоторыми соответствующими деталями, если требуется) в тему PubSub (это займет несколько миллисекунд) — вы модифицируете свою облачную функцию таким образом и создаете тему PubSub для этой цели.
С другой стороны этого раздела есть еще одна облачная функция, которая запускается автоматически. Вы можете разработать эту облачную функцию и реализовать любую необходимую вам функциональность.