Apa yang akan menjadi cara paling efisien untuk menyisipkan jutaan catatan katakan 50 juta dari bingkai data Spark ke Postgres Tables. Saya telah melakukan ini dari percikan ke MSSQL di masa lalu dengan memanfaatkan salinan massal dan opsi ukuran batch yang berhasil juga.
Adakah sesuatu yang serupa yang bisa ada di sini untuk Postgres?
Menambahkan kode yang telah saya coba dan waktu yang diperlukan untuk menjalankan proses:
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()
Jadi saya melakukan pendekatan di atas untuk 10 juta catatan dan memiliki 5 koneksi paralel sebagaimana ditentukan dalam numPartitions
dan juga mencoba ukuran batch 200k .
Total waktu yang dibutuhkan untuk proses ini adalah 0: 14: 05.760926 (empat belas menit dan lima detik).
Apakah ada pendekatan efisien lain yang akan mengurangi waktu?
Berapa ukuran batch yang efisien atau optimal yang dapat saya gunakan? Apakah meningkatkan ukuran batch saya melakukan pekerjaan lebih cepat? Atau membuka banyak koneksi, misalnya> 5 membantu saya membuat proses lebih cepat?
Rata - rata 14 menit untuk 10 juta catatan tidak buruk , tetapi mencari orang di luar sana yang akan melakukan ini sebelumnya untuk membantu menjawab pertanyaan ini.