/ / BigQueryIO.read (). FromQuery performance slow - google-bigquery, google-cloud-dataflow, apache-beam

BigQueryIO.read (). FromQuery performance slow - google-bigquery, google-cloud-dataflow, apache-beam

Una de las cosas que he notado es que laEl rendimiento de BigQueryIO.read (). fromQuery () es bastante más lento que el rendimiento de BigQueryIO.read (). from () en Apache Beam. ¿Por qué pasó esto? ¿Y hay alguna manera de mejorarlo?

Respuestas

4 para la respuesta № 1

Como se discute en esta otra pregunta similar desbordamiento de pila (donde realmente discutieron sobre los precios y no la velocidad), la razón por la que percibes diferencias notables entre esos dos Métodos de lectura BigQueryIO Es porque, bajo el capó, hacen operaciones completamente diferentes:

  • BigQueryIO.read.from() Lee directamente toda la tabla de BigQuery. Esta función exporta toda la tabla a archivos temporales en Google Cloud Storage, desde donde se leerá más adelante. Esto no requiere casi ningún cálculo, ya que solo realiza un trabajo de exportación, y luego Dataflow lee desde GCS (no desde BigQuery).
  • BigQueryIO.read.fromQuery() Ejecuta una consulta y luego lee los resultados.Recibido después de la ejecución de la consulta. Por lo tanto, esta función requiere más tiempo, dado que requiere que una consulta se ejecute primero (lo que incurrirá en los costos económicos y computacionales correspondientes).

Así que, en definitiva, la principal diferencia entre aquellos.Dos funciones de Apache Beam es que una lee toda la tabla de una exportación de BigQuery ⟷ GCS, mientras que la otra ejecuta una consulta y luego lee sus resultados. Sus conceptos subyacentes son completamente diferentes, así que como respuesta a su pregunta sobre si hay alguna forma de mejorar el rendimiento, no, no hay nada que pueda hacer una parte del diseño de consulta optima para su caso de uso siguiendo las mejores prácticas de BigQuery.