Krátkou odpovědí je, že asynchronní operace zatemňují vaše profilování.
Dokumenty na bq.query
uveďte, že výsledný google.cloud.bigquery.job.QueryJob
objekt je asynchronní dotazovací práce. To znamená, že po odeslání dotazu se pythonový interpret nezablokuje, dokud se nepokusíte použít výsledky dotazu s jedním ze synchronních QueryJob
metody, to_dataframe()
. Významnou část z 87 sekund, které vidíte, pravděpodobně strávíte čekáním na návrat dotazu.
Můžete počkat na dokončení dotazu voláním QueryJob.done
iterativně, dokud nevrátí hodnotu true, pak zavolejte svůj 2. profilovací tiskový výpis.
Toto není tak docela optimalizace vašeho kódu, ale doufejme, že pomůže posunout se správným směrem. Je možné, že nějaké vyladění zpáteční cesty pandami by mohlo pomoci, ale domnívám se, že je pravděpodobné, že většinu času strávíte čekáním na čtení/zápis z vašich databází a že psaní bude efektivnější nebo větší počet menších dotazů bude vaším úkolem. jediná možnost, jak zkrátit celkový čas.