Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Optimiza los costos de BigQuery en "modo fácil" con BigQuery Lens

By Matan BordoDec 14, 202210 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

BigQuery cost optimization

Seguirles el ritmo a las buenas prácticas de optimización de costos de BigQuery no es fácil, ¿y si tuvieras una herramienta que simplemente te dijera qué hacer?

Tus costos de BigQuery están subiendo, ¿y ahora qué?

Claro, podrías escarbar en los audit logs en busca de pistas, o leerte las BigQuery Best Practices de Google Cloud para entender mejor qué se podría optimizar.

Pero con un backlog de proyectos pendientes e incendios que apagar, ¿de verdad tú o tu equipo se pueden dar el lujo de dedicarle el tiempo necesario? Por nuestra experiencia, casi siempre la respuesta es un rotundo "No".

La mayoría de las empresas con las que trabajamos tienen demasiadas tareas de producto con mayor prioridad y recursos de Engineering limitados como para encarar la optimización de costos de BigQuery. Como consecuencia, muchas arman su infraestructura de datos en BigQuery sobre la marcha, y después terminan pagando las consecuencias de esas decisiones.

¿Y si tuvieras una herramienta que simplemente te dijera qué hacer?

Por eso creamos BigQuery Lens, que entrega recomendaciones personalizadas a partir de las buenas prácticas de BigQuery y de nuestra propia experiencia ayudando a miles de clientes a optimizar su uso de BigQuery.

Veamos varias buenas prácticas de BigQuery y cómo aplicarlas con BigQuery Lens.

big query performance

"Gracias a las recomendaciones de BigQuery Lens, dedicamos tiempo a particionar nuestras tablas clave y logramos reducir nuestros gastos en BigQuery un 25 % al mes."

  • Daniel Rimon, Head of Data Engineering, Resident

Cómo BigQuery Lens te ayuda a optimizar tus costos

BigQuery Lens analiza tus jobs de BigQuery y la metadata de tus tablas, y entrega recomendaciones de optimización accionables junto con un desglose detallado de las estadísticas de uso de tu equipo.

Puedes pasar horas metido hasta el cuello en audit logs y queries tratando de armar dashboards con Cloud Monitoring o consultando INFORMATION_SCHEMA.JOBS, pero eso solo arroja métricas de alto nivel. Aun así, te tocará a ti decidir qué acciones tomar.

BigQuery Lens hace simple poner en práctica las buenas prácticas.

En concreto, sus recomendaciones apuntan a ayudarte a:

  • Reducir la cantidad de datos escaneados aplicando clustering o particionado en tus tablas
  • Reducir los costos de tus jobs programados
  • Aprovechar el flat-rate pricing cuando tenga sentido
  • Bajar los costos de almacenamiento eliminando tablas sin uso
  • Asegurar el uso de campos particionados en tus queries
  • Reorganizar los jobs recurrentes para reducir la necesidad de comprar slots

bigquery performance tuning

Reduce los bytes procesados con clustering y particionado de tablas

Ya sea que consultes un proyecto con on-demand o flat-rate pricing, vas a ganar en costo y rendimiento si reduces la cantidad de bytes que procesan tus queries. En proyectos con on-demand pricing, esto reduce directamente los costos de análisis. Y aunque el flat-rate pricing es fijo según la cantidad de slots que compres, reducir los bytes procesados también ayuda a bajar costos de manera indirecta, porque reduce el uso promedio de slots. Esto, a su vez, disminuye la cantidad de slots que necesitarás comprar (más sobre esto abajo).

Y un buen punto de partida es aplicar clustering o particionado a tus tablas.

Clustering de tablas (y cómo sacarle el máximo provecho)

El clustering mejora el rendimiento de tus queries al organizar la tabla en bloques de datos según la(s) columna(s) que elijas para hacerlo. Así, BigQuery escanea solo los bloques de datos relevantes, siempre que estructures tus queries correctamente.

bigquery cost optimization

Sin embargo, el beneficio que obtienes del clustering depende de qué columna(s) uses —y en qué orden— y de cómo estructures tus queries sobre las tablas con clustering.

Conviene aplicar clustering a las tablas por columnas que se consultan con frecuencia, sobre todo cuando esas columnas tienen muchos valores distintos. En ese escenario, BigQuery consulta tus tablas de forma más eficiente al aprovechar el orden de columnas que define tu estrategia de clustering.

bigquery-data-storage-cost

Como ves en el diagrama de abajo, también es importante estructurar tus queries siguiendo el orden de los campos de clustering que selecciones (es decir, filtrando tus campos en el mismo orden del clustering). Esto te permitirá aprovechar al máximo la estrategia de clustering definida para tus tablas en tus jobs de BigQuery.

bigquery table suffix

BigQuery Lens identifica las tablas a las que deberías aplicar clustering y resalta la(s) columna(s) que conviene usar y en qué orden. Solo tienes que hacer clic en el nombre de la tabla en la ventana de recomendación para abrirla en tu Google Cloud Console y aplicar clustering a la tabla.

También vale la pena comparar tus queries previas sobre la tabla en cuestión con los jobs que corras sobre esa misma tabla después del clustering. Es muy probable que veas mejoras tanto en el costo como en el tiempo de ejecución de los jobs que corren sobre esa tabla.

bigquery performance

Particionado de tablas (y por qué deberías hacerlo)

El particionado de tablas ayuda a controlar los costos al dividir una tabla grande en bloques más pequeños. En concreto, cuando aplicas partition pruning —filtrando particiones específicas en tus queries para no escanear toda la tabla—, el particionado se vuelve muy efectivo.

También te permite gestionar tus datos a un nivel más granular. Puedes configurar particiones específicas para que expiren o gestionar de forma más eficiente los nuevos datos de entrada usando particiones en tus tablas de BigQuery.

bigquery create table

Al igual que con las tablas con clustering, para aprovechar el beneficio de las tablas particionadas tu query debe usar un filtro válido sobre el valor de la columna de particionado.

Nota: BigQuery Lens también identifica queries sobre tablas particionadas que no usan un filtro válido pero que podrían usarlo (ver "Asegurar el uso de campos particionados en tus queries" más abajo).

Y al igual que con la recomendación de clustering, BigQuery Lens también te indica qué tablas particionar y por qué campo. Esto es útil en general, pero si tienes dashboards de BI corriendo sobre BigQuery, implementar particiones puede hacer que tus dashboards sean más rápidos y tus queries más baratas.

bigquery partition

Cuándo aplicar clustering Y particionado a una tabla

En algunos casos, puede convenir usar una estrategia que combine tanto particionado como clustering en tus tablas de BigQuery.

Esta estrategia resulta más útil cuando quieres un ordenamiento muy fino dentro de tus tablas (ver el diagrama de abajo) y, a la vez, ganar visibilidad sobre los costos probables de tus queries antes de ejecutarlas, gracias a las capacidades de partition pruning de BigQuery.

Sin embargo, ten en cuenta que combinar ambas estrategias implica mantener más metadata para tus tablas, y los beneficios del clustering se notarán menos si tus tablas no se consultan con frecuencia por campos comunes. Eso anularía las ventajas de esta estrategia particular al estructurar tablas en BigQuery.

google bigquery performance

Pásate al flat-rate pricing

A medida que crece tu uso y tus datos en BigQuery, puedes llegar a un punto en el que ahorrarías dinero al cambiar del modelo on-demand al flat-rate.

Cuando BigQuery Lens detecta que puedes reducir costos al hacerlo, muestra una recomendación de slot commitment. En el ejemplo de abajo, BigQuery Lens muestra que nuestro uso máximo promedio diario es de 169 slots y, por lo tanto, recomienda reservar 200 slots, ya que la compra se hace en incrementos de 100. También vemos un uso pico mucho mayor, de 2.238 slots.

bigquery lens

Nota: las reservas de BigQuery y el modelo on-demand pricing no son mutuamente excluyentes. Puedes alternar entre ambos con BigQuery Reservations e incluso incorporar Flex Slots.

Como los slots tienen un compromiso mínimo de un mes, si no tienes claridad sobre tu actividad futura de queries, los picos extremos o la estacionalidad de tu uso de BigQuery, conviene ser especialmente prudente al comprarlos. Aquí es donde los Flex Slots resultan útiles. Los Flex Slots te permiten comprar slots por períodos cortos: tan poco como 60 segundos a la vez.

Por ejemplo, si corres todos tus jobs de carga/reportes a las 3 a. m., puedes escalar fácilmente programando el aprovisionamiento y desaprovisionamiento de Flex Slots con Cloud Composer. Para evitar que la demanda supere la disponibilidad de slots, uno de nuestros clientes incluso usa Cloud Functions para revisar cada cinco minutos si su uso de slots supera el 90 % de su commitment, aprovisionando automáticamente Flex Slots para que no

bigquery table

Baja la frecuencia de tus jobs programados y otros recurrentes

Puede que tengas jobs programados que no necesitan ejecutarse con tanta frecuencia, o que directamente no deberían ejecutarse. BigQuery Lens detecta los jobs que se ejecutan con frecuencia y muestra el ahorro potencial de reducir su frecuencia de ejecución entre un 10 % y un 50 %.

Esta recomendación ayuda a tener mejores conversaciones de gestión de costos con tu equipo y asegura que solo corras los jobs más costosos cuando realmente haga falta.

bigquery query performance

Por ejemplo, un cliente notó varios jobs que no necesitaban correrse con tanta frecuencia. Lo planteó al equipo más amplio para reducir la frecuencia y calculó que podría ahorrar entre un 10 % y un 15 % en costos de queries con una pequeña reducción en el número de ejecuciones.

Otro cliente detectó queries programadas que ya eran obsoletas. Antes de usar BigQuery Lens, no tenía visibilidad sobre esto. El mes siguiente a cancelar las queries programadas innecesarias, vio caer el gasto en BigQuery - Analysis en más de un 50 %.

bigquery cost optimization on demand

Por último, si estas queries recurrentes salen de un dashboard de BI (por ejemplo, Looker), tienes la oportunidad de reducir costos corriéndolas a través de BI Engine. BI Engine es ideal para queries de dashboards porque cachea de forma inteligente los datos de BigQuery en memoria, lo que se traduce en queries más rápidas. Como BI Engine cachea los datos en memoria, la etapa de la query que lee los datos de la tabla es gratis. En su lugar, solo pagas por la capacidad de memoria reservada. Sin embargo, si tu proyecto usa flat-rate pricing, las etapas posteriores consumen slots de tu reserva de BigQuery.

Ahorra en almacenamiento haciendo backup y eliminando tablas sin uso

Las queries no son lo único en lo que puedes ahorrar: también pagas por almacenamiento en BigQuery. Las tablas sin uso son, según hemos visto, una oportunidad poco aprovechada para reducir el gasto en BigQuery.

BigQuery Lens resalta las tablas (y particiones, si existen) que no se han usado en los últimos 30 días. Puedes reducir los costos de almacenamiento haciendo backup de estas tablas en Cloud Storage y luego eliminándolas de BigQuery (o ajustando la configuración de expiración de la tabla).

Hace poco, un cliente usó esta recomendación para detectar varias tablas con datos de más de 3 años de antigüedad que no se estaban consultando. Tras hacer backup y eliminar esas tablas, vio caer sus costos de BigQuery alrededor de un 30 %.

bigquery cost

Asegura el uso de campos particionados en tus queries

Particionar tus tablas es solo la mitad del trabajo. Después de particionar, hay que asegurarse de que esas tablas se consulten de forma efectiva, usando el campo por el que está particionada la tabla. Esto te da más control sobre los costos al escanear porciones más pequeñas de tu tabla en lugar de la tabla completa.

Sin embargo, al gestionar un equipo de analistas de datos, es difícil saber si todos están realmente incluyendo el campo particionado en sus queries. BigQuery Lens identifica los jobs que consultan tablas particionadas sin usar el campo particionado.

bigquery jobs

Reduce los costos de flat-rate reorganizando los jobs recurrentes

Optimizar tus costos de flat-rate es como jugar Tetris. Tu objetivo es estabilizar tu uso y tener "bloques" planos de consumo de slots por hora.

Pero lo habitual es que tengas picos y valles en tu uso promedio de slots por hora (ver el gráfico de abajo). Y puede que estés tomando tus decisiones de compra de slots con base en ese uso inconsistente, gastando más de lo necesario.

partition by bigquery

Para reducir tus costos de flat-rate, identifica los jobs recurrentes que ocurren en esas horas pico y muévelos (si es posible) a horas en las que el uso promedio sea bajo, o aprovisiona Flex Slots para manejar la carga adicional.

Esto aplana los picos, de modo que tengas un patrón de uso de slots más bajo y consistente. Como resultado, necesitarás comprar menos slots y reducirás tus costos de flat-rate a largo plazo.

BigQuery Lens muestra las queries ejecutadas más de 30 veces al mes en proyectos con flat-rate pricing, junto con la hora en la que se ejecutan y la cantidad de slots que consumen.

bigquery pricing

Después puedes buscar queries en horas pico y ver si puedes moverlas a horas con menor uso. Tomando el gráfico de arriba como ejemplo, deberías buscar queries ejecutadas a las 4 a. m. o 4 p. m. y moverlas a las 7 a. m. o 8 p. m. si es posible.

Cómo obtener BigQuery Lens

Como con cualquier cosa en la nube pública, si no tienes cuidado con cómo usas BigQuery, los costos pueden dispararse. Y dado que BigQuery está en el centro de la estrategia de datos de muchas empresas, no nos sorprende que sea, de manera consistente, uno de nuestros temas más populares en cuanto a tickets de clientes.

Por eso es importante que estés optimizando costo y rendimiento todo el tiempo. Y es igual de crucial que entiendas cómo está usando BigQuery tu equipo, porque no se puede optimizar lo que no se conoce. BigQuery Lens te ayuda a hacer justamente eso.

Si no eres cliente de DoiT y te gustaría tener acceso a BigQuery Lens y a nuestros expertos en BigQuery, contáctanos.

Si ya eres cliente de DoiT, deberías activar BigQuery Lens si aún no lo has hecho.