Jawaban singkatnya adalah bahwa operasi asinkron memperkeruh profil Anda.
Dokumen di bq.query
nyatakan google.cloud.bigquery.job.QueryJob
objek adalah asinkron pekerjaan kueri. Artinya, setelah kueri dikirimkan, penerjemah python tidak memblokir sampai Anda mencoba menggunakan hasil kueri dengan salah satu QueryJob
yang sinkron metode, to_dataframe()
. Bagian signifikan dari 87 detik yang Anda lihat kemungkinan hanya dihabiskan untuk menunggu kueri kembali.
Anda dapat menunggu kueri selesai dengan memanggil QueryJob.done
berulang-ulang hingga mengembalikan nilai true, lalu panggil pernyataan cetak profil kedua Anda.
Ini bukan pengoptimalan kode Anda, tetapi semoga membantu bergerak ke arah yang benar. Mungkin beberapa penyetelan panda bolak-balik dapat membantu, tetapi saya pikir kemungkinan sebagian besar waktu Anda dihabiskan untuk menunggu membaca/menulis dari basis data Anda, dan bahwa menulis lebih efisien atau sejumlah besar kueri yang lebih kecil akan menjadi milik Anda. satu-satunya pilihan untuk mengurangi total waktu.