Was wäre der effizienteste Weg, um Millionen von Datensätzen einzufügen, beispielsweise 50 Millionen von einem Spark-Datenrahmen in Postgres-Tabellen. Ich habe dies in der Vergangenheit von Spark bis MSSQL getan, indem ich die Option für Massenkopien und Stapelgrößen verwendet habe, die ebenfalls erfolgreich war.
Gibt es etwas Ähnliches, das für Postgres hier sein kann?
Hinzufügen des Codes, den ich versucht habe, und der Zeit, die zum Ausführen des Prozesses benötigt wurde:
def inserter():
start = timer()
sql_res.write.format("jdbc").option("numPartitions","5").option("batchsize","200000")\
.option("url", "jdbc:postgresql://xyz.com:5435/abc_db") \
.option("dbtable", "public.full_load").option("user", "root").option("password", "password").save()
end = timer()
print(timedelta(seconds=end-start))
inserter()
Also habe ich den obigen Ansatz für 10 Millionen Datensätze durchgeführt und 5 parallele Verbindungen wie in angegeben angegeben numPartitions
und auch eine Stapelgröße von 200 KB ausprobiert .
Die Gesamtzeit für den Vorgang betrug 0: 14: 05.760926 (vierzehn Minuten und fünf Sekunden).
Gibt es einen anderen effizienten Ansatz, der die Zeit verkürzen würde?
Was wäre die effiziente oder optimale Chargengröße, die ich verwenden kann? Wird das Erhöhen meiner Chargengröße die Arbeit schneller erledigen? Oder das Öffnen mehrerer Verbindungen, dh> 5, hilft mir, den Prozess zu beschleunigen?
Im Durchschnitt sind 14 Minuten für 10 Millionen Datensätze nicht schlecht , aber es gibt Leute, die dies zuvor getan hätten, um diese Frage zu beantworten.