MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Optimierung des Airflow-Tasks, der Daten von BigQuery in MongoDB überträgt

Die kurze Antwort lautet, dass asynchrone Vorgänge Ihre Profilerstellung durcheinander bringen.

Die Dokumentation auf bq.query Geben Sie an, dass der resultierende google.cloud.bigquery.job.QueryJob Objekt ist ein asynchrones Job abfragen. Das bedeutet, dass nach dem Absenden der Abfrage der Python-Interpreter nicht blockiert, bis Sie versuchen, die Ergebnisse der Abfrage mit einem der synchronen QueryJob zu verwenden Methoden, to_dataframe() . Ein beträchtlicher Teil der 87 Sekunden, die Sie sehen, wird wahrscheinlich nur damit verbracht, auf die Rückkehr der Abfrage zu warten.

Sie könnten warten, bis die Abfrage abgeschlossen ist, indem Sie QueryJob.done aufrufen iterativ, bis es true zurückgibt, dann rufen Sie Ihre zweite Profiling-Print-Anweisung auf.

Dies ist nicht ganz eine Optimierung Ihres Codes, hilft aber hoffentlich dabei, sich in die richtige Richtung zu bewegen. Es ist möglich, dass eine gewisse Optimierung des Pandas-Roundtrips hilfreich sein könnte, aber ich denke, es ist wahrscheinlich, dass Sie die meiste Zeit damit verbringen, auf Lese- / Schreibvorgänge aus Ihren Datenbanken zu warten, und dass das Schreiben effizienter oder eine größere Anzahl kleinerer Abfragen Ihre Aufgabe sein wird einzige Option zum Verkürzen der Gesamtzeit.