Het korte antwoord is dat asynchrone bewerkingen je profilering vertroebelen.
De documenten op bq.query
geef aan dat de resulterende google.cloud.bigquery.job.QueryJob
object is een asynchroon taak opvragen. Dit betekent dat, nadat de query is ingediend, de python-interpreter niet blokkeert totdat u de resultaten van de query probeert te gebruiken met een van de synchrone QueryJob
methoden, to_dataframe()
. Een aanzienlijk deel van de 87 seconden die u ziet, wordt waarschijnlijk gewoon besteed aan het wachten op de terugkeer van de zoekopdracht.
U kunt wachten tot de query is voltooid door QueryJob.done
. te bellen iteratief totdat het true retourneert, roep dan uw 2e profileringsafdrukopdracht aan.
Dit is niet echt een optimalisatie van uw code, maar hopelijk helpt het in de goede richting. Het is mogelijk dat wat afstemming van de rondreis van de panda's kan helpen, maar ik denk dat het waarschijnlijk is dat het grootste deel van je tijd wordt besteed aan het wachten op lezen/schrijven uit je databases, en dat het schrijven van efficiëntere of een groter aantal kleinere zoekopdrachten jouw enige optie om de totale tijd te verkorten.