1

Netezza テーブルに書き込みたいリストに約 100 万件のレコードがあります。私は pyodbc で executemany() コマンドを使用していますが、これは非常に遅いようです (レコードを Excel に保存し、Excel ファイルから Netezza にロードすると、はるかに高速にロードできます)。executemany() コマンドでリストをロードするより高速な代替手段はありますか?

PS1: リストは当社独自の DAG によって生成されるため、リストへの書き込みは非常に高速です。

PS2: executemany() をチャンクにループしてみました。各チャンクには 100 レコードのリストが含まれています。読み込みには約 60 秒かかり、非常に遅いようです。

4

2 に答える 2

3

Python から、一時的な外部テーブルを使用して、何百万もの行を Netezza にロードする優れたパフォーマンスが得られました。基本的に、Python はローカル マシンに CSV ファイルを作成し、ODBC ドライバーに CSV ファイルをリモート サーバーにロードするように指示します。

最も簡単な例:

SELECT * 
FROM EXTERNAL '/tmp/test.txt'
SAMEAS test_table 
USING (DELIM ',');

バックグラウンドでは、これは nzload コマンドと同等ですが、nzload は必要ありません。これは、nzload がなかった Windows でうまく機能しました。

警告: CSV のフォーマット、CSV 内の値、およびコマンドのオプションに注意してください。Netezza は、無効な値に対してあいまいなエラー メッセージを表示します。

于 2017-10-26T03:16:18.150 に答える
0

Netezza は、executeMany() が一度に多数の行を挿入するバルク ロードに適しています。何百万もの行をロードする最良の方法は、vbscript、Windows の Excel マクロ、または Linux のシェル スクリプトでスケジュールできる「nzload」ユーティリティです。

于 2016-02-24T10:39:14.650 に答える