Конфигурация автоматического захвата Snowpipe выглядит так, как будто запускает все трубы
Я новичок в хранилище данных Snowflake и хочу загружать данные с помощью snowpipe и автоматического захвата с внешнего этапа (ведро S3), которое содержит несколько папок (по одной для каждой базы данных), а внутри этих папок есть несколько файлов по 1 для каждой таблицы. Файлы в разных папках будут обновляться в разное время, и в настоящее время я использую автоматический захват, чтобы перейти с S3 на SQS и на Snowpipe.
Мой пример ведра S3 настроен следующим образом:
myS3bucket.s3amazonaws.com
/db1
account.csv
product.csv
/db2
invoice.csv
employees.csv
В настоящее время я понимаю, что я бы создал один канал для каждой таблицы, поэтому account.csv будет относиться к 1 каналу, который будет заполнять таблицу учетных записей, а затем product.csv будет относиться к другому каналу для заполнения таблицы продуктов и т. Д.
На данный момент похоже, что все каналы будут запущены, если я добавлю новый файл в корзину, поскольку уведомление находится в корзине.
Мои вопросы:
- Это правильно, что все каналы запускаются, когда я добавляю новый файл? Нужно ли мне настраивать db1 и db2 как разные внешние этапы, чтобы, если я добавлю файл в папку db1, будут прочитаны только каналы, связанные с этим внешним этапом?
- Я читал, что SNS можно использовать, но не знаю, как это работает для Snowpipe. Отправляет ли S3 сообщение, чтобы он мог решить, какой канал вызвать, и передает ли сообщение этому каналу?
- Есть ли лучший подход к этому, чем то, что я использую выше?
Спасибо за любую помощь
2 ответа
При использовании Auto-Ingest Snowflake создает SQS для каждой учетной записи Snowflake, все уведомления от S3 поступают в тот же SQS, а затем передаются в каждый канал в зависимости от определения этапа каждого канала (корзины и пути). Если этапы пересекаются в путях, SQS потенциально передаст уведомление нескольким каналам.
См. Раздел "Важно" в разделе "Создание канала с включенной автоматической загрузкой" в документации "Автоматизация Snowpipe для Amazon S3".
https://docs.snowflake.com/en/user-guide/data-load-snowpipe-auto-s3.html
Если ваши этапы включают путь к файлу, тогда, когда S3 отправит сообщение о том, что файл был добавлен, Snowflake определит, какие этапы затронуты, поэтому только каналы, которые указывают на эту папку, будут втягивать файл.
если у вас есть три канала с тремя этапами, и эти этапы указывают на эти папки:
- 1:
blahblah
- 2:
blahblah/db1
- 3:
blahblah/db2
затем, когда файл создается в blahblah/db1
он запустит трубы 1 и 2, но не 3.