Quel serait le moyen le plus efficace d'insérer des millions d'enregistrements, par exemple 50 millions d'une trame de données Spark dans des tables Postgres. J'ai fait cela de spark à MSSQL dans le passé en utilisant l' option de copie en bloc et de taille de lot qui a également réussi.
Y a-t-il quelque chose de similaire qui peut être ici pour Postgres?
Ajout du code que j'ai essayé et du temps qu'il a fallu pour exécuter le processus:
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()
J'ai donc fait l'approche ci-dessus pour 10 millions d'enregistrements et j'ai eu 5 connexions parallèles comme spécifié dans numPartitions
et j'ai également essayé une taille de lot de 200k .
Le temps total nécessaire pour le processus était de 0: 14: 05.760926 (quatorze minutes et cinq secondes).
Existe-t-il une autre approche efficace qui réduirait le temps?
Quelle serait la taille de lot efficace ou optimale que je peux utiliser? L'augmentation de la taille de mon lot fera-t-elle le travail plus rapidement? Ou ouvrir plusieurs connexions, c'est-à-dire> 5, m'aider à accélérer le processus?
En moyenne, 14 minutes pour 10 millions d'enregistrements, ce n'est pas mal , mais chercher des gens qui auraient fait cela avant pour répondre à cette question.