Как эффективно загрузить большой набор данных от вызова процедуры (Table Input) до таблицы назначения через чайник Pentaho? - PullRequest
0 голосов
/ 28 ноября 2018

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

Я не уверен, как это сделать.,

Мой процесс: ввод таблицы (вызов процедуры - возвращает 900 миллионов записей) -> Преобразование данных -> Шаг вставки / обновления (добавочная загрузка в целевую таблицу).

Теперь мне нужноизвлекайте из процедуры несколько записей (скажем, 1 миллион за один раз) на основе некоторого поля в процедуре, а затем загружайте их в таблицу.Это должно повторяться до конца строк процедуры.

Пожалуйста, помогите мне в этом.

1 Ответ

0 голосов
/ 29 ноября 2018

Я не вижу в этом проблемы, за исключением времени, которое требуется для обработки такого количества строк.PDI (ложка / чайник) работает с потоками , а не с " наборами данных ", как в SQL, и строки обрабатываются, как толькоони получены.Из-за этого PDI, скорее всего, никогда не придется обрабатывать все 900 миллионов строк одновременно, и вам не придется ждать, пока все они будут возвращены из SQL, прежде чем он начнет обработку.

Table outputstep имеет значение Commit size для управления количеством записей, отправляемых в вашу целевую таблицу за одну транзакцию .Хитрость заключается в том, чтобы сбалансировать количество времени, необходимое для запуска новых соединений, и время, необходимое для обработки большого количества строк в одной транзакции.Я запускаю значения от 200 до 5000, в зависимости от моих потребностей и возможностей системы, но вы, возможно, сможете подняться выше этого значения.

Похоже, ваша большая проблема будет возвращать столько строк из хранимой процедуры.Использование SP вместо SELECT или VIEW означает, что вам придется искать способы поддержания низкого давления памяти.

У меня есть несколько многомиллионных таблиц строк, и я создаю таблицы TEMP (переменные, не входящие в таблицу) для хранения данных во время обработки, используя один SELECT * FROM temp..table в конце SP.Это обеспечивает потоковую передачу данных с сервера, как ожидается, и использует минимальный объем памяти.

...