Snowpipe: импорт исторических данных, которые могут быть изменены без повторного импорта - PullRequest
1 голос
/ 23 октября 2019

Начнем с того, что я не уверен, возможно ли это с существующими функциями Snowpipe.

У меня есть корзина S3 с годами данных, и иногда некоторые из этих файлов обновляются (содержимоеизменить, но имя файла остается прежним). Я надеялся использовать Snowpipe для импорта этих файлов в Snowflake, так как аспект «мы не будем импортировать измененные файлы» мне нравится.

Однако я обнаружил, что ALTER PIPE ... REFRESH может быть толькоиспользуется для импорта файлов, созданных не ранее, чем семь дней назад, и единственной другой рекомендацией, которая есть в документации Snowflake для импорта исторических данных, является использование COPY INTO .... Однако , если я использую это, то, если эти старые файлы модифицируются, они импортируются через Snowflake, поскольку метаданные, препятствующие COPY INTO ... повторному импорту файлов S3, и метаданные для Snowpipe отличаются, поэтому яможет закончиться тем, что этот файл будет импортирован дважды.

Есть ли какой-нибудь подход, если не считать "изменить все этих файлов в S3, чтобы у них была недавно измененная отметка времени", что позволило бы мнеиспользовать Snowpipe с этим?

1 Ответ

0 голосов
/ 14 ноября 2019

Если вы не против этого решения для сценариев, одним из решений было бы написать сценарий для извлечения набора имен объектов из области действия из AWS S3 и передачи их в API-интерфейс REST Snowpipes. Код, который вы бы использовали для этого, очень похож на тот, который требуется, если вы используете AWS Lambda для вызова API Snowpipe REST при запуске через уведомление о событии S3. Вы можете использовать AWS SDK, чтобы получить набор объектов из S3, или просто использовать оператор Snowflake LIST STAGE , чтобы извлечь их.

Я использовал этот подход несколько раз для обратной засыпки историиданные из местоположения AWS S3, где мы включили прием Snowpipe после того, как данные уже были там записаны. Даже в сценарии, где вам не нужно беспокоиться об обновлении файла на месте, это все равно может быть преимуществом по сравнению с простым переключением на прямое COPY INTO, потому что вам не нужно беспокоиться, если есть какое-либо совпадение между тем, когдаСначала была включена PIPE, и набор файлов, которые вы отправляете в API-интерфейс Snowpipe REST, поскольку история загрузки PIPE позаботится об этом за вас.

...