質問

私は緑Plumから引き出されているデータから時間毎に入力されなければならないテーブルを持っています。このテーブルは緑Plum Serverに保存されています。

だから、私が知りたいことは、どのような方法(Pythonスクリプト、Windowsスケジューラ、または何も)が私のデータに適していることです(私は60GB以上巨大になる可能性がある)クエリのスケジュールに使用する必要があることです(PostgreSQLで書かれています)1時間ごとに実行される。

誰かが同じのサンプルコードを添付できますか?

役に立ちましたか?

解決

データの範囲の範囲の並列COPYをgreenplumから、PostgreSQLにしたいと思うでしょう。 PostgreSQLが高速データロード用に設定されていることを確認してください。可能であれば、UNLOGGEDテーブルを使用してください。それ以外の場合は、少なくともwal_level = 'minimal'を使用してください。

PostgreSQLサーバーのI / Oサブシステムには何よりも並列に依存します。テストして見てください。

PSYCOPG2とcopy_expertカーソル関数を使用してPythonを使用することをお勧めします。 docs 。リーダーとライターワーカー間のファイルのようなオブジェクトを共有するために、リーダーとライターをPostgreSQLに接続して、パイプでマルチプロセッシングを使用します。

それで、効果的に各労働者は次のシェル疑似コードのような少し何かをします。

psql -h greenplum-box \
     -c "COPY (SELECT * FROM mytable WHERE id BETWEEN 1 AND 10000) TO stdin" \
  | \
psql -h postgres-box \
     -c "COPY myttable FROM stdin";
.

(PYSCOPG2、copy_export、マルチプロセッシング、およびパイプ)を使用して両方を接続します。

その後索引を作成するような通常の速いロード作業をすべて行います。 PostgreSQL の挿入パフォーマンスをスピードアップする方法

ディスク容量がある場合は、dataload_tempのようなテーブルを作成し、1つのトランザクションで古いものをドロップし、新しいものを古いものの名前に変更します。そのように最小の中断がある。

交互に、オフライン(では非ストリーミング)バルクデータロード用のpg_bulkloadを参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top