Проблемы с конвейером данных Snowflake - в частности, проблема потока - PullRequest
0 голосов
/ 20 марта 2020

Фон

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

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

Проблема

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

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

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

Вопрос

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

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

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

Обеспокоенность

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

1 Ответ

2 голосов
/ 20 марта 2020

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

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

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

Нет, потоки не поддерживают разбиение на фрагменты.

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

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

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

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

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

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

...