Готовим "PostgreSQL Bulk Loader" на PDI

Сегодня разберемся как максимально быстро загрузить данные в Postgresql при помощи PDI. Это делается при помощи шага "PostgreSQL Bulk Loader". В статье разберем тонкости настройки вставки данных и сравним скорости вставки обычным методом и Bulk Loader.

Сам шаг «PostgreSQL Bulk Loader» требует указания пути до psql. Вот тут и начинаются проблемы с кодировкой. В источнике файл может иметь кодировку отличную от кодировки Postgresql. Основные проблемы:

  1. Данные в PDI двигаются в исходной кодировке. К примеру если файл имеет кодировку CP1251, то данные имеют кодировку CP1251.
  2. Заголовки имеют тоже названия в кодировке java машине. Обычно для Win систем  CP1251.
  3. psql вставляет в кодировке БД (в моем случае UTF-8) при помощи вызова функции copy.

Имеем следующее:

  1. Postgresql кодировка UTF-8,
  2. исходный файл в кодировке CP1251.

Требуется привести все к кодировке UTF-8 и вставить в Postgresql.

Решение:

  • Перекодируем CP1251 в кодировку UTF-8. Это можно сделать шагом “Select values” вкладка “Meta-data”.
  • При запуске Spoon.bat или Spoon.sh вставкой дополнительного параметра "-Dfile.encoding=UTF-8".
  • И вставим данные при помощи “PostgreSQL Bulk Loader”.

Более подробно в видео. (Загрузка/Download)

План видео (ссылка на youtube https://youtu.be/eAww-CzyQvs)

00:00 Введение
00:47 Загрузка файла с в кодировке CP-1251
02:26 Перекодирование потока данных.
03:35 Изменение кодировки в PDI. "-Dfile.encoding=UTF-8"
04:13 Вставка данных и замеры скорости.
06:56 Выводы

Выигрыш в скорости. Вставка данных обычным способом происходит в районе 20 000 строк в секунду. По сети вставка при помощи "PostgreSQL Bulk Loader" достигает 40 000 строк в секунду. А при вставке данных на localhost более  120 000. Получаем прирост в скорости от 2 до 6 раз.

Ссылки на материалы:

  1. PostgreSQL Bulk Loader  http://wiki.pentaho.com/display/EAI/PostgreSQL+Bulk+Loader
  2. Select Values http://wiki.pentaho.com/display/EAI/Select+Values