0

Greenplum データベースのバージョン: PostgreSQL 8.2.15 (Greenplum データベース 4.2.3.0 ビルド 1)

SQL Server データベースのバージョン: Microsoft SQL Server 2008 R2 (SP1)

現在のアプローチ:

1) 各テーブルを SQL Server からフラット ファイルにエクスポートします。

2) PSQL コンソールの psql.exe ユーティリティを使用して、pgAdmin III でデータを Greenplum にロードします。


利点...

  • 速度: わかりましたが、もっと速いものはありますか? 数百万行のデータを数分で読み込みます

  • 自動化: わかりました。VB のシェル スクリプトを使用して、SSIS パッケージからこのユーティリティを呼び出します。


落とし穴...

  • 信頼性: ETL は、フラット ファイルを保持するファイル サーバーに依存しています。

  • セキュリティ: ファイル サーバー上の機密データの可能性がある大量のデータ

  • エラー処理: 問題です。psql.exe は、エラーが発生し、データや部分的なファイルをロードしない場合でも、キャッチできるエラーを発生させません


他に試したことは...

.Net Providers\Odbc Data Provider: DataDirect 6.0 Greenplum Wire Protocol を使用してシステム DSN を構成しました。DELETE の優れたパフォーマンス。INSERT が非常に遅い犬。

参考までに、これは前述の SSIS の VB スクリプトです...

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 '"'
4

1 に答える 1

1

データの読み込みが数分で完了している場合は、現在の方法で十分です。ただし、大量のデータ (たとえば、テラバイト規模) をロードする必要がある場合は、Greenplum に一括ロードするための通常推奨される方法はgpfdist、対応するEXTERNAL TABLE定義を使用することです。 gploadは、このプロセスの大部分を抽象化し、YAML 制御ファイルによって駆動される適切なラッパーです。一般的な考え方はgpfdist、データがステージングされている場所でインスタンスが (できれば CSV テキスト ファイルとして) スピンアップされ、EXTERNAL TABLEGreenplum 内の定義がgpfdistインスタンスの URI を認識するようになるというものです。管理者ガイドによると、このような外部テーブルのサンプル定義は次のようになります。

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;

大量のデータの場合、すべてのセグメント ホストが並行してロードされるため、これが最も効率的な方法です。上記の単純化したアプローチでは、テーブルがランダムに分散される可能性が高く、望ましくない可能性があることに注意してください。分散キーを指定するには、テーブル定義をカスタマイズする必要があります。

于 2015-01-30T22:52:00.740 に答える