BigQuery: tres formas de calcular el coste

Una vez que empezamos a usar BigQuery y conocer las posibilidades que te ofrece, llega el momento de hablar de uno de sus aspectos menos agradables: el precio.

BigQuery es un herramienta muy potente, parte del ecosistema de Google Cloud, y como es lógico tiene que tener algún coste asociado, tanto al uso como al almacenamiento de los datos. Es cierto, que proyectos pequeños, como este que estas visitando ahora mismo, no van a incurrir en gastos, el volumen de datos manejados es ínfimo. Google tiene un presupuesto gratuito para empezar a trabajar con esta herramienta y, además, el coste se mide en Terabytes de datos. Te gastarás mas en café en un día que usando BigQuery en un año.
 
Pero según vaya escalando el tamaño del proyecto, tanto el volumen de datos almacenados, como los datos consultados y las personas utilizándola va a ir subiendo. Y con esto, el coste de la herramienta.

En este caso, es muy necesario conocer cuanto se gasta en la herramienta, quien se lo gasta y en que consultas. De esta forma se podra mantener el coste bajo control y ver en que procesos se puede optimizar.

Hay tres opciones para consultar el coste de uso de BigQuery.

Índice:

La opción más rápida: Informe de Facturación

 
La primera forma de consultar el coste de facturación de BigQuery es con el 'Informe de Facturación'. Este informe proporciona una información básica pero suficiente para conocer cuanto estas gastando, tanto en dinero como en tamaño de los datos.

Para acceder a este informe, simplemente pincha en el menú hamburguesa y busca la opción 'Facturación'. 
Aquí podrás ver un desglose de tus gastos, lo que te permitirá identificar rápidamente las áreas donde se están generando costes.
01 BQ_Coste_informe de facturacion
Informe de facturación
 
Sin embargo, esta información tiene sus limitaciones. Aunque es útil para una consulta rápida y poco detallada, no permite una visualización más avanzada ni la creación de KPI’s  personalizados. Esto puede ser un inconveniente si necesitas un control más exhaustivo y detallado de tus gastos. Hay que buscar otra solución. 
 

Una opción mejor: Exportación de datos de facturación a una tabla

 
La segunda opción para realizar el seguimiento de tus costes en BigQuery es exportar los datos de facturación a una tabla dentro de la propia plataforma. Este método permite aprovechar las capacidades de BigQuery para analizar el consumo de recursos de forma más detallada y flexible.


Para activar esta exportación, dirígete al menú de Facturación y selecciona la opción Exportación de la facturación. Al habilitar esta opción, se generarán automáticamente varias tablas en BigQuery donde se registrarán los datos de facturación de manera continua. A partir de aquí, puedes realizar consultas SQL personalizadas para obtener la información específica que necesitas, adaptándola a los requisitos de tus análisis.

02 BQ_Coste_Exportacion a tablas
Exportación a tablas
 
Una ventaja adicional de este método es la posibilidad de crear tablas adicionales que pueden conectarse con herramientas externas, como Google Sheets o Looker Studio. Estas conexiones permiten compartir datos fácilmente o realizar visualizaciones interactivas, útiles para informes y presentaciones.

03 BQ_Coste exportacion a tabla
Exportación datos facturación a tabla
 
A pesar de sus beneficios, este método presenta ciertas limitaciones significativas: no permite identificar quiénes son los usuarios que utilizan BigQuery ni con qué frecuencia, además de omitir detalles sobre el tamaño y el tipo de consultas que ejecutan.

​Esta falta de información limita la visibilidad sobre el uso específico de la herramienta, haciendo que no sea tan completo como podría ser para una monitorización exhaustiva de costes y uso.
 

La mejor opción: Consultar las ejecuciones de BigQuery

 
BigQuery, como herramienta cloud, registra automáticamente cada una de las ejecuciones realizadas en la plataforma. Esto significa que se almacena información detallada sobre cada consulta, como quién la ha ejecutado, en qué momento, cuántas veces y el tamaño de cada ejecución. Toda esta información es accesible y se puede consultar, lo que nos permite generar consultas personalizadas para responder preguntas clave sobre el uso de la herramienta.
Con estos datos básicos, es posible crear una query que nos proporcione la información específica que necesitamos para analizar el uso de BigQuery. Este tipo de consulta resulta especialmente útil para gestionar costes, ya que permite identificar patrones de uso y optimizar el consumo de recursos.
A continuación, se muestra el código necesario para crear esta consulta. Luego, analizaremos cada parte del código para entender su funcionamiento y aprender cómo adaptarlo a las necesidades particulares de cada usuario o equipo.
 
select
FORMAT_TIMESTAMP("%F %H:%I", creation_time, "Europe/Madrid") as query_time,
user_email,
project_id,
count(*) as queries,
sum(total_bytes_billed)/ pow(2,40) as total_tebibytes_billed, --pow(2,40) representa 1 Tebibyte (TiB)
sum(total_bytes_billed)/ pow(2,40) * 7.81 as estimated_cost_USD,
(sum(total_bytes_billed)/ pow(2,40) * 7.81)/count(*) as estimated_cost_USD_per_query
from `region-europe-southwest1`.INFORMATION_SCHEMA.JOBS
Where creation_time between timestamp_sub(current_timestamp(), INTERVAL 28 day) and timestamp_sub(current_timestamp(), INTERVAL 1 day)
group by all
order by 1 asc

 
Vamos a analizar este código paso a paso para entender bien que significa:

1. FORMAT_TIMESTAMP("%F %H:%I", creation_time, "Europe/Madrid") as query_time
  • FORMAT_TIMESTAMP se usa para formatear el campo creation_time (el momento en que se creó la consulta).
  • "%F %H:%I" define el formato de salida, donde:
    • %F es el formato AAAA-MM-DD para la fecha.
    • %H:%I representa la hora y los minutos en formato de 24 horas.
  • "Europe/Madrid" define la zona horaria a usar, en este caso la de Madrid.
  • Finalmente, se le da un alias a esta columna formateada como query_time.
2. user_email
  • Este campo directamente selecciona el correo electrónico del usuario que ejecutó la consulta. user_email es un campo preexistente en el esquema de información de BigQuery.
3. count(*) as queries
  • count(*) cuenta todas las filas (todas las consultas) que cumplen con los criterios de la consulta.
  • Se le da el alias queries, representando el número total de consultas realizadas por usuario o proyecto (dependiendo de la agrupación).
4. sum(total_bytes_billed)/pow(2,40) as total_tebibytes_billed
  • sum(total_bytes_billed) suma el total de bytes facturados por las consultas.
  • pow(2,40) es una expresión matemática que representa 1 Tebibyte (TiB), ya que 1 TiB = 2^40 bytes.
  • El resultado es el total de bytes facturados convertido a Terabytes, con el alias total_tebibytes_billed.
  • Si te preguntas que es un TiB, un tebibyte es parte del sistema binario de medida, basado en potencias de 2. 1 tebibyte = 2^40 bytes = 1,099,511,627,776 bytes. Se usa en sistemas y contextos informáticos donde las capacidades de almacenamiento se manejan tradicionalmente en potencias de 2 (como la RAM o sistemas de archivos). Gracias chatGPT 😜
5. sum(total_bytes_billed)/pow(2,40) * 7.81 as estimated_cost_USD
  • Esta sentencia calcula el coste estimado en USD:
    • Se toma el total de bytes facturados, se convierte a Tebibytes como en la sentencia anterior.
    • Luego, se multiplica por un valor estimado de 7.81 (que podría ser el costo en USD por Tebibyte facturado). Este valor depende de la zona donde se almacenen tus datos, hay zonas más baratas y zonas más caras. Puedes consultar este precio en este enlace: Precios|BigQuery: Cloud Data Warehouse y modificar esta consulta en función de donde hayas almacenado los datos.
    • El alias es estimated_cost_USD, que representa el coste total estimado en dólares estadounidenses.
6. (sum(total_bytes_billed)/pow(2,40) * 7.81)/count(*) as estimated_cost_USD_per_query
  • Esta expresión calcula el coste promedio por consulta:
    • El coste total en USD calculado en la sentencia anterior se divide por el número de consultas (count(*)).
  • Se le da el alias estimated_cost_USD_per_query, que representa el coste estimado en USD por cada consulta realizada.
7. FROM region-europe-southwest1.INFORMATION_SCHEMA.JOBS
  • Esta cláusula especifica de dónde se obtienen los datos.
  • INFORMATION_SCHEMA.JOBS es una tabla del sistema que contiene información sobre las tareas (o consultas) ejecutadas en BigQuery.
  • Se está consultando la región europe-southwest1.
8. WHERE creation_time between "2023-09-01" and current_timestamp()
  • Se filtran las consultas cuyo creation_time está entre el 1 de septiembre de 2023 y el momento actual (current_timestamp()).
  • Este filtro garantiza que solo se incluyan en el resultado las consultas ejecutadas en ese rango de fechas.

Con este código obtendrás los datos que necesitas y programar su ejecución de forma periódica como te contamos en este articulo: Como programar consultas en BigQuery

Una vez que tengas los datos, podrás guardarlos en una tabla y crearte un informe con el que hacer seguimiento de los costes de uso de BigQuery.

David Hernández

Digital Analyst


Soy un apasionado de los datos, la tecnología, la ciencia y el aprendizaje continuo.

Trabajo como Digital Analyst desde 2020.

Participo en el ciclo completo de los datos: definición e implementación de recolección, procesado y distribución, análisis de datos y reporting.

Submit Your Comment