Проблемы Snowflake Data Pipeline - в частности, проблема с потоком

Задний план

Я реализовал конвейер данных снежинки (файл журнала s3> SNS > труба> таблица этапов> поток> задача> сохраненный процесс /UDF > итоговая таблица) в нашей производственной базе данных снежинок.

В то время как в нашей базе данных разработчиков все работало в меньшем масштабе, похоже, что производственный конвейер перестал работать, учитывая количество данных (6416006096 записей и их рост), которые пытались передать их потоком.

Проблема

После некоторого расследования, похоже, что s3 log > SNS > pipe > stage table в порядке, но я застрял там, где задача извлекает записи из потока... Поток НЕ устарел. Я потратил много времени на чтение документации по потокам и не нашел там никакой помощи по моей текущей проблеме.

Похоже, что в потоке слишком много данных для возврата - когда я пытаюсь получить счетчик (*) или * с ограничением 10 из потока, он не возвращается через 8 минут (и подсчет)...

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

Вопрос

Есть ли способ вернуть что-нибудь из потока без его сброса?

Есть ли способ разбить результаты из потока без потери всех изменений в транзакции?

Есть ли какой-то недокументированный лимит на потоки - я его достиг?

Беспокойство

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

1 ответ

Решение

Есть ли способ вернуть что-нибудь из потока без его сброса?

Вы должны иметь возможность выбирать из потока, не сбрасывая его. Только использование его в DML (например, вставить в mytable как select * from stream) сбросит его.

Есть ли способ разбить результаты из потока без потери всех изменений в транзакции?

Нет, потоки не поддерживают разбиение на части.

Есть ли какой-то недокументированный лимит на потоки - я его достиг?

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

Некоторые другие соображения:

  • Вы используете склад подходящего размера? Если у вас много данных в потоке и много DML, состоящих из обновлений, удалений и вставок, вы можете пересмотреть размер своего хранилища. Я считаю, что Snowflake выполняет некоторые сравнения уровней разделов для согласования добавленных и удаленных данных.

  • Можете ли вы "подтянуть" частоту чтения из потока, чтобы каждый раз обрабатывать меньше данных?

  • В зависимости от типа данных, которые вас интересуют, Snowflake предлагает тип потока только с добавлением, который показывает только добавленные данные. Это значительно ускоряет сканирование.

Другие вопросы по тегам