Frage

Ich habe eine Tabelle, die stündlich mit den aus Greenplum abgerufenen Daten gefüllt werden muss. Diese Tabelle wird auf dem Greenplum-Server gespeichert.

Ich möchte also wissen, welche Methode (Python-Skript, Windows-Scheduler oder etwas anderes) für meine Daten geeignet ist (die meiner Meinung nach bis zu 60 GB oder mehr groß sein können) und zum Planen der Abfrage (geschrieben in PostgreSQL) verwendet werden sollte ), die stündlich ausgeführt werden soll.

Kann jemand einen Beispielcode dafür anhängen?

War es hilfreich?

Lösung

Sie werden eine Parallele machen wollen COPY von Bereichen der Daten aus Greenplum und in PostgreSQL.Stellen Sie sicher, dass PostgreSQL für schnelles Laden von Daten eingerichtet ist.Verwenden Sie nach Möglichkeit eine UNLOGGED Tisch;sonst verwenden wal_level = 'minimal' mindestens.

Wie viele parallele Worker es gibt, hängt vor allem vom E/A-Subsystem des PostgreSQL-Servers ab.Testen und sehen.

Ich würde die Verwendung von Python mit psycopg2 und dem empfehlen copy_expert Cursorfunktion.Sehen die Dokumente.Verwenden Sie Multiprocessing mit einer Pipe, um ein dateiähnliches Objekt zwischen einem Reader- und Writer-Worker gemeinsam zu nutzen, wobei der Reader mit greenplum und der Writer mit PostgreSQL verbunden ist.

Im Grunde macht also jeder Worker so etwas wie den folgenden Shell-Pseudocode:

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";

(aber Sie verbinden die beiden mit pyscopg2, copy_export, Multiprocessing und eine Pipe).

Erledigen Sie anschließend alle üblichen Schnellladearbeiten wie das Erstellen von Indizes.Sehen So beschleunigen Sie die Einfügeleistung in PostgreSQL.

Wenn Sie über ausreichend Speicherplatz verfügen, erstellen Sie eine Tabelle wie dataload_temp, füllen Sie es aus, löschen Sie dann in einer Transaktion das alte und benennen Sie das neue in den Namen des alten um.Auf diese Weise gibt es minimale Störungen.

Alternativ schauen Sie sich an pg_bulkload zum Offline-Laden (aber ohne Streaming) großer Datenmengen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top