Перенос данных из базы данных DB2 в базу данных greenplum
Моя компания решила внедрить datamart с помощью [Greenplum], и у меня есть задача выяснить, как это сделать. Ориентировочный показатель объема данных, передаваемых из существующей БД [DB2] в БД Greenplum, составляет около 2 ТБ.
Я хотел бы знать: 1) БД Greenplum - это то же самое, что и vanilla [PostgresSQL]? (Я работал над Postgres AS 8.3) 2) Есть ли (бесплатные) инструменты, доступные для этой задачи (извлечение и импорт) 3) У меня есть некоторые знания Python. Возможно ли, даже легко сделать это в разумные сроки?
Я понятия не имею, как это сделать. Любые советы, советы и предложения будут очень приветствоваться.
4 ответа
1) Greenplum - это не ванильный постгрес, но он похож. У него есть новый синтаксис, но в целом он очень последовательный.
2) Сам Greenplum предоставляет нечто, называемое "gpfdist", которое позволяет вам прослушивать порт, который вы укажете для ввода файла (но файл должен быть разделен). Вы хотите читаемые внешние таблицы. Они довольно быстрые. Синтаксис выглядит так:
CREATE READABLE EXTERNAL TABLE schema.ext_table
( thing int, thing2 int )
LOCATION (
'gpfdist://server:port1/path/to/filep1.txt',
'gpfdist://server:port2/path/to/filep2.txt',
'gpfdist://server:port3/path/to/filep3.txt'
) FORMAT 'text' (delimiter E'\t' null 'null' escape 'off') ENCODING 'UTF8';
CREATE TEMP TABLE import AS SELECT * FROM schema.ext_table DISTRIBUTED RANDOMLY;
Если вы играете по их правилам и ваши данные чисты, загрузка может быть очень быстрой.
3) Для этого вам не нужен python, хотя вы можете автоматизировать его, используя python для запуска процессов gpfdist, а затем отправив команду в psql, которая создает внешнюю таблицу и загружает данные. Зависит от того, что вы хотите сделать, хотя.
Как правило, это очень медленно, если вы используете SQL вставку или объединение для импорта больших объемов данных.
Рекомендуемый способ - использовать внешние таблицы, которые вы определили, для использования файлов на основе файлов, веб-страниц или файлов, размещенных по протоколу gpfdist.
Также у greenplum есть утилита с именем gpload, которая может быть использована для определения ваших заданий на передачу, таких как источник, вывод, режим (инертный, обновление или слияние).
1) Это не ванильный постгрес
2) Я успешно использовал интеграцию данных Pentaho в различных типах проектов передачи данных. Он позволяет выполнять сложные преобразования и многопотоковую многоступенчатую загрузку данных, если вы тщательно продумываете свои шаги. Также я считаю, что Pentaho особенно поддерживает Greenplum, хотя у меня нет такого опыта.
Многие из утилит Greenplum написаны на python, и текущий дистрибутив СУБД поставляется с установленным python 2.6.2, включая модуль pygresql, который вы можете использовать для работы внутри GPDB.
Для передачи данных в greenplum я написал скрипты на python, которые подключаются к исходной (Oracle) БД с помощью cx_Oracle, а затем выводят этот вывод либо в плоские файлы, либо в именованные каналы. gpfdist может читать из любого источника и загружать данные в систему.