簡単に言うと、非同期操作によってプロファイリングが混乱しているということです。
bq.query
に関するドキュメント 結果のgoogle.cloud.bigquery.job.QueryJob
オブジェクトは非同期です クエリジョブ。つまり、クエリが送信された後、同期されたQueryJob
のいずれかでクエリの結果を使用しようとするまで、Pythonインタープリターはブロックされません。 メソッド、to_dataframe()
。表示されている87秒のかなりの部分は、クエリが返されるのを待つためだけに費やされている可能性があります。
QueryJob.done
を呼び出すことで、クエリが完了するのを待つことができます。 trueが返されるまで繰り返し、2番目のプロファイリング印刷ステートメントを呼び出します。
これはコードの最適化ではありませんが、正しい方向に進むのに役立つことを願っています。パンダの往復の調整が役立つ可能性はありますが、データベースからの読み取り/書き込みを待つためにほとんどの時間が費やされている可能性があり、より効率的な書き込みまたはより多くの小さなクエリの書き込みがあなたの合計時間を短縮するための唯一のオプション。