2013-04-16 4 views
0

Greenplum версия базы данных: PostgreSQL 8.2.15 (Greenplum Database 4.2.3.0 сборки 1)Наиболее эффективный способ передачи данных из базы данных SQL Server в базу данных Greenplum?

SQL версии сервера баз данных: Microsoft SQL Server 2008 R2 (SP1)

Наш нынешний подход:

1) Экспорт каждой таблицы в плоский файл с SQL Server

2) загрузить данные в Greenplum с pgAdmin III с использованием утилиты psql.exe PSQL консоли


... ПРЕИМУЩЕСТВА

  • Скорость: Хорошо, но есть что-нибудь быстрее? Мы загружаем миллионы строк данных в течение нескольких минут

  • Автоматизация: Хорошо, мы называем эту утилиту из пакета SSIS, используя сценарий оболочки в VB


Ловушки ...

  • Надежность: ETL зависит от файлового сервера: держать плоские файлы

  • Безопасность: Много потенциально конфиденциальных данных на файловом сервере

  • Обработка ошибок: Это проблема. psql.exe никогда не выдает ошибку, что мы можем поймать, даже если он не делает ошибки, и загружает никаких данных или файл частичной


Что еще мы попытались ...

.Net Providers \ поставщик данных Odbc: мы настроили системный DSN с использованием протокола DataPlay 6.0 Greenplum Wire Protocol. Хорошая производительность для DELETE. Собака ужасно медленна для ВСТАВКИ.

Для справки, это вышеупомянутый VB скрипт в SSIS ...

Public Sub Main() 

    Dim v_shell 
    Dim v_psql As String 


    v_psql = "C:\Program Files\pgAdmin III\1.10\psql.exe -d "MyGPDatabase" -h "MyGPHost" -p "5432" -U "MyServiceAccount" -f \\MyFileLocation\SSIS_load\sql_files\load_MyTable.sql" 

    v_shell = Shell(v_psql, AppWinStyle.NormalFocus, True) 

End Sub 


Это содержимое файла "load_MyTable.sql" ...

\copy MyTable from '\\MyFileLocation\SSIS_load\txt_files\MyTable.txt' with delimiter as ';' csv header quote as '"' 
+0

[Greenplum] (http://www.greenplum.com/products) что? Чтобы воспроизвести вашу проблему, какой продукт я смогу установить? – billinkc

+0

Спасибо за ваш комментарий. PostgreSQL 8.2.15 (Greenplum Database 4.2.3.0 build 1). Я добавил информацию о версии базы данных в начало вопроса. –

+0

Просто комментарий .... вы можете вызвать эту командную строку непосредственно в файле .CMD (или.BAT): 'C: \ Program Files \ pgAdmin III \ 1.10 \ psql.exe -d" MyGPDatabase "-h" MyGPHost "-p" 5432 "-U" MyServiceAccount "-f \\ MyFileLocation \ SSIS_load \ sql_files \ load_MyTable.sql'. Если вы хотите сделать что-нибудь сложное, например, заменить/динамические параметры, тогда обязательно установите его в VBScript, но это не обязательно. Вы даже можете поместить это в свой пакет SSIS или в качестве рабочего шага для автоматизации всего дела –

ответ

1

Если вы получаете ваши загрузки данных в считанные минуты, то текущий метод, вероятно, достаточно хорошо. Однако, если вам приходится загружать большие объемы данных (например, терабайтная шкала), обычный предпочтительный метод для массовой загрузки в Greenplum составляет gpfdist и соответствующие определения EXTERNAL TABLE. gpload - достойная оболочка, которая обеспечивает абстракцию большей части этого процесса и управляется файлами управления YAML. Общая идея заключается в том, что экземпляр (ы) разворачивается в местах расположения ваших данных, предпочтительно в виде текстовых файлов CSV, а затем определение EXTERNAL TABLE в Greenplum информируется об URI для экземпляров gpfdist. Из руководства администратора, определение образца такой внешней таблицы может выглядеть следующим образом:

CREATE READABLE EXTERNAL TABLE students (
name varchar(20), address varchar(30), age int) 
LOCATION ('gpfdist://<host>:<portNum>/file/path/') 
FORMAT 'CUSTOM' (formatter=fixedwidth_in, 
name=20, address=30, age=4, 
preserve_blanks='on',null='NULL'); 

В приведенном выше примере предполагается чтение текстовых файлов, поля слева направо являются 20 символами (не более) строки, 30-символьная строка и целое число. Чтобы фактически загрузить эти данные в промежуточную таблицу внутри GP:

CREATE TABLE staging_table AS SELECT * FROM students; 

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

Смежные вопросы