Инкрементная загрузка / обновление таблицы PostgreSQL с использованием Pentaho DI - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть следующий поток в интеграции данных Pentaho, чтобы прочитать текстовый файл и сопоставить его с таблицей PostgreSQL.

При первом запуске этого потока все идет хорошо, и таблица заполняется. Однако, если позже я захочу сделать инкрементное обновление для той же таблицы, мне нужно обрезать его и снова запустить поток. Есть ли способ, который позволяет мне загружать только новые / обновленные строки?

В операторе массовой загрузки PostgreSQL я вижу только опции «Усекать / Вставлять», и это очень неэффективно, так как мои таблицы действительно большие.

Смотрите мою реализацию:

enter image description here

Спасибо заранее !!

Ответы [ 2 ]

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

вы ищете дополнительную нагрузку. Вы можете сделать это двумя способами.

  1. Существует шаг, который называется «Вставить / Обновить», он будет использоваться для инкрементальной загрузки.

у вас будет возможность указать ключевые столбцы для сравнения. затем в разделе полей выберите «Y» для обновления. Пожалуйста, выберите «N» для тех столбцов, которые вы выбираете при сравнении ключей.

  1. Использовать вывод таблицы и снять флажок «Усечь таблицу». При получении данных из исходной таблицы используйте переменную в предложении where. сначала получите максимальное значение из вашей целевой таблицы и задайте для него значение переменной и включите его в предложение where вашего запроса.

Редактирование здесь .. если ваш источник данных представляет собой плоский файл, то, как я уже сказал, получите максимальное значение (date / int) из целевой таблицы и объедините с вашими данными. после этого используйте строки фильтра для получения дополнительных данных.

Надеюсь, это поможет.

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

Обращая внимание на возможности, некоторые пользователи говорят, что единственным преимуществом Bulk Loader является производительность с очень большой партией строк (свыше миллионов). Но есть способы противостоять этому.

Попробуйте использовать шаг для вывода таблицы , с размером пакета («Размер коммита» в шаге) 5000 и изменением количества копий, выполняющих этот шаг (зависит от количества ядер в вашем процессоре). ) 4 экземпляра (двухъядерный процессор с 2 логическими ядрами и т. д.). Вы можете изменить количество копий, щелкнув правой кнопкой мыши шаг в графическом интерфейсе и установив желаемое количество.

Это распараллелит вывод в 4 группы вставок по 5000 строк в каждом цикле. Если это вызывает перегрузку памяти в JVM, вы можете легко адаптировать ее и увеличить использование памяти в параметре PENTAHO_DI_JAVA_OPTIONS, просто удвоив количество, установленное для Xms (минимум) и XmX (максимум), для моего установлено значение «-Xms2048m» -Xmx4096m».

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...