Estima los costos de las consultas
BigQuery ofrece dos modelos de precios de procesamiento (análisis):
Precios según demanda: Pagas por los datos que se analizan en las consultas. Tienes una capacidad de procesamiento de consultas fija y por proyecto, y tu costo se basa en la cantidad de bytes que procesa cada consulta.
Precios basados en la capacidad: pagas por la capacidad de procesamiento de consultas específica o con ajuste de escala automático, que se mide en ranuras, durante un período. Varias consultas comparten la misma capacidad de ranuras.
En esta página, se proporciona información sobre cómo estimar los costos de tus consultas en BigQuery.
Estima los costos de las consultas según demanda
Para estimar los costos antes de ejecutar una consulta con el modelo de precios según demanda, puedes usar uno de los siguientes métodos:
- El validador de consultas en la consola de Google Cloud
- La marca
--dry_run
en la herramienta de línea de comandos debq
- El parámetro
dryRun
cuando se envía un trabajo de consulta mediante las bibliotecas cliente o la API
Los costos estimados que se proporcionan mediante estos métodos pueden variar de los costos reales debido a varios factores. Por ejemplo, considera las siguientes situaciones:
- Una cláusula de consulta que filtra los datos, como una cláusula
WHERE
, puede reducir de forma significativa la cantidad de bytes que se leen. - Los datos que se agregan o borran después de que se proporciona la estimación podrían aumentar o disminuir la cantidad de bytes que se leen cuando se ejecuta la consulta.
Consola
Cuando ingresas una consulta en la consola de Google Cloud, el validador de consultas verifica la sintaxis de la consulta y proporciona una estimación del número de bytes leídos. Puedes usar esta estimación para calcular el costo de la consulta en la calculadora de precios.
bq
Cuando ejecutas una consulta en la herramienta de línea de comandos de bq
, puedes usar la marca --dry_run
para estimar la cantidad de bytes leídos. Puedes usar esta estimación para calcular el costo de la consulta en la calculadora de precios.
Una consulta de la herramienta de bq
que usa la marca --dry_run
se ve de la siguiente manera:
bq query \ --use_legacy_sql=false \ --dry_run \ 'SELECT column1, column2, column3 FROM `project_id.dataset.table` LIMIT 1000'
Cuando ejecutas el comando, la respuesta contiene la estimación de bytes leídos: Query successfully validated. Assuming the tables are not modified, running
this query will process 10918 bytes of data.
API
Para realizar una ejecución de prueba mediante la API, envía un trabajo de consulta con dryRun
establecido en true
.
go
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
PHP
Antes de probar este ejemplo, sigue las instrucciones de configuración para PHP incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para PHP.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Para realizar una ejecución de prueba con la biblioteca cliente de Python, configura la propiedad QueryJobConfig.dry_run comoTrue
.
Client.query() siempre muestra un QueryJob completo cuando se proporciona una configuración de consulta de ejecución de prueba.
Cálculo del tamaño de la consulta según demanda
En esta sección, se describe cómo calcular la cantidad de bytes que procesan varios tipos de consultas mediante el modelo de facturación a pedido.
Declaraciones DML
Si usas la facturación a pedido, BigQuery cobra por las declaraciones del lenguaje de manipulación de datos (DML) según la cantidad de bytes que procesa la declaración.
Tablas no particionadas
En las tablas no particionadas, la cantidad de bytes procesados se calcula de la siguiente manera:
- q = la suma de bytes procesados por la declaración DML, incluidas las columnas a las que se hace referencia en tablas que analiza la declaración DML.
- t = la suma de bytes de todas las columnas en la tabla actualizada por la declaración DML en el momento en que comienza la consulta, sin importar si esas columnas son referenciada o modificada por la declaración DML.
Declaración DML | Bytes procesados |
---|---|
INSERT |
q |
UPDATE |
q + t |
DELETE |
q + t |
MERGE |
Si solo hay cláusulas INSERT , q. Si existe una cláusula UPDATE o DELETE : q + t. |
Tablas particionadas
En el caso de las tablas particionadas, la cantidad de bytes procesados se calcula de la siguiente manera:
- q' = la suma de bytes procesados por la misma declaración DML, incluidas las columnas a las que se hace referencia en todas las particiones que se analizaron con la declaración DML.
- t = la suma de bytes de todas las columnas en las particiones actualizadas por la declaración DML en el momento en que comienza la consulta, sin importar si esas columnas referencia o se modifica mediante la declaración DML.
Declaración DML | Bytes procesados |
---|---|
INSERT |
q' |
UPDATE |
q' + t' |
DELETE |
q' + t' |
MERGE |
Si solo hay cláusulas INSERT en la declaración MERGE : q'. Si hay una cláusula UPDATE o DELETE en la declaración MERGE : q' + t'. |
Declaraciones DDL
Si usas la facturación a pedido, BigQuery cobra por las consultas en el lenguaje de definición de datos (DDL) según la cantidad de bytes que procesa cada consulta.
Declaración DDL | Bytes procesados |
---|---|
CREATE TABLE |
Ninguno. |
CREATE TABLE ... AS SELECT ... |
La suma de bytes procesados de todas las columnas a las que se hace referencia en las tablas que se analizaron en la consulta. |
CREATE VIEW |
Ninguno. |
DROP TABLE |
Ninguno. |
DROP VIEW |
Ninguno |
Consultas de varias declaraciones
Si usas la facturación según demanda, BigQuery cobra por las consultas de varias declaraciones según la cantidad de bytes procesados durante la ejecución estas consultas.
Se aplican los siguientes precios para estas consultas de varias declaraciones:
DECLARE
: La suma de bytes que se analizaron en cualquier tabla a la que se hizo referencia en la expresiónDEFAULT
. Las declaracionesDECLARE
sin referencias de tablas no generan ningún costoSET
: Suma de bytes que se analizaron en cualquier tabla a la que se hizo referencia en la expresión. Las declaracionesSET
sin referencias de tablas no generan ningún costoIF
: Suma de bytes que se analizaron en cualquier tabla a la que se hizo referencia en la expresión de condición. Las expresiones de condiciónIF
sin referencia de tabla no generan ningún costo. Cualquier declaración en el bloqueIF
que no se ejecute no generará ningún costoWHILE
: Suma de bytes que se analizaron en cualquier tabla a la que se hizo referencia en la expresión de condición. Las declaracionesWHILE
sin referencias de tablas en la expresión de condición no generan ningún costo. Cualquier declaración en el bloqueWHILE
que no se ejecute no generará ningún costoCONTINUE
oITERATE
: Sin costos asociadosBREAK
oLEAVE
: Sin costos asociadosBEGIN
oEND
: Sin costos asociados
Si una consulta de varias declaraciones falla, se aplica el costo de cualquier declaración hasta el momento del error. La declaración que falló no genera ningún costo.
Ejemplo de los precios de las consultas de varias declaraciones
El siguiente ejemplo contiene comentarios arriba de cada declaración con los que se explica el costo (si lo hay) que genera la siguiente declaración.
-- No cost, since no tables are referenced.
DECLARE x DATE DEFAULT CURRENT_DATE();
-- Incurs the cost of scanning string_col from dataset.table.
DECLARE y STRING DEFAULT (SELECT MAX(string_col) FROM dataset.table);
-- Incurs the cost of copying the data from dataset.big_table. Once the
-- table is created, you are not charged for storage while the rest of the
-- multi-statement query runs.
CREATE TEMP TABLE t AS SELECT * FROM dataset.big_table;
-- Incurs the cost of scanning column1 from temporary table t.
SELECT column1 FROM t;
-- No cost, since y = 'foo' doesn't reference a table.
IF y = 'foo' THEN
-- Incurs the cost of scanning all columns from dataset.other_table, if
-- y was equal to 'foo', or otherwise no cost since it is not executed.
SELECT * FROM dataset.other_table;
ELSE
-- Incurs the cost of scanning all columns from dataset.different_table, if
-- y was not equal to 'foo', or otherwise no cost since it is not executed.
UPDATE dataset.different_table
SET col = 10
WHERE true;
END IF;
-- Incurs the cost of scanning date_col from dataset.table for each
-- iteration of the loop.
WHILE x < (SELECT MIN(date_col) FROM dataset.table) DO
-- No cost, since the expression does not reference any tables.
SET x = DATE_ADD(x, INTERVAL 1 DAY);
-- No cost, since the expression does not reference any tables.
IF true THEN
-- LEAVE has no associated cost.
LEAVE;
END IF;
-- Never executed, since the IF branch is always taken, so does not incur
-- a cost.
SELECT * FROM dataset.big_table;
END WHILE;
Tablas agrupadas
Las tablas agrupadas en clústeres reducen los datos para que las consultas no los procesen, lo que te permite disminuir este tipo de gastos. Este proceso se conoce como reducción de bloques.
Reducción de bloques
BigQuery ordena los datos en una tabla agrupada en clústeres según los valores de las columnas de agrupamiento en clústeres y, luego, los organiza en bloques.
Cuando ejecutas una consulta en una tabla agrupada en clústeres, y la consulta tiene un filtro en las columnas agrupadas en clústeres, BigQuery usa la expresión de filtro y los metadatos del bloque a fin de reducir la cantidad de bloques que analiza la consulta. Esto permite que BigQuery analice solo los bloques relevantes.
Cuando se reduce un bloque, no se lo analiza. Para calcular los bytes de datos que procesó la consulta, solo se usan los bloques analizados. La cantidad de bytes que procesó una consulta en una tabla agrupada en clústeres equivale a la suma de los bytes leídos en cada columna a la que hizo referencia la consulta en los bloques analizados.
Si se hace referencia varias veces a una tabla agrupada en una consulta que usa muchos filtros, BigQuery cobra por el análisis de las columnas en los bloques apropiados de cada filtro respectivo.
Ejemplo de precio de una tabla agrupada en clústeres
Supón que tienes una tabla agrupada en clústeres con el nombre ClusteredSalesData
. La tabla está particionada en la columna timestamp
y se agrupa en clústeres según la columna customer_id
. Los datos se organizan en el conjunto de bloques que se indica a continuación:
Identificador de la partición | ID del bloque | Valor mínimo de customer_id en el bloque | Valor máximo de customer_id en el bloque |
---|---|---|---|
20160501 | B1 | 10000 | 19999 |
20160501 | B2 | 20000 | 24999 |
20160502 | B3 | 15000 | 17999 |
20160501 | B4 | 22000 | 27999 |
Ejecutas la siguiente consulta en la tabla. La consulta contiene un filtro en la columna customer_id
.
SELECT SUM(totalSale) FROM `mydataset.ClusteredSalesData` WHERE customer_id BETWEEN 20000 AND 23000 AND DATE(timestamp) = "2016-05-01"
La consulta realiza las siguientes acciones:
- Analiza las columnas
timestamp
,customer_id
ytotalSale
en los bloques B2 y B4. - Reduce el bloque B3 debido al predicado de filtro
DATE(timestamp) = "2016-05-01"
en la columna de particióntimestamp
. - Reduce el bloque B1 debido al predicado de filtro
customer_id BETWEEN 20000 AND 23000
en la columna de agrupamiento en clústerescustomer_id
.
Consulta formatos de columna en Cloud Storage
Si tus datos externos se almacenan en ORC o Parquet, la cantidad de bytes que se cobran está limitada por las columnas que BigQuery lee. Debido a que la consulta convierte los tipos de datos de una fuente externa en tipos de datos de BigQuery, la cantidad de bytes leídos se calcula según el tamaño de los tipos de datos de BigQuery. Para obtener más información sobre las conversiones de tipos de datos, consulta las siguientes páginas:
Usa la calculadora de precios de Google Cloud.
La calculadora de precios de Google Cloud puede ayudarte a crear una estimación del costo mensual general para BigQuery en función del uso proyectado.
A pedido
Para estimar los costos en la calculadora de precios de Google Cloud con el modelo de precios según demanda, sigue estos pasos:
- Abre la calculadora de precios de Google Cloud.
- Haz clic en BigQuery.
- Haz clic en la pestaña On-Demand (A pedido).
- En Nombre de la tabla, escribe el nombre de la tabla. Por ejemplo,
airports
- En Precios de almacenamiento, ingresa el tamaño estimado de la tabla en los campos de almacenamiento. Solo deberás estimar el almacenamiento físico o el almacenamiento lógico, según el modelo de facturación de almacenamiento del conjunto de datos.
- En Query Pricing (Precios de las consultas), ingresa los bytes leídos estimados de tu ejecución de prueba o el validador de consultas.
- Haz clic en Add To Estimate (Agregar a la estimación).
- La estimación aparece a la derecha. Ten en cuenta que puedes guardar o enviar la estimación por correo electrónico.
Para obtener más información, consulta los precios según demanda.
Tarifa plana
Para estimar los costos en la calculadora de precios de Google Cloud con el modelo de precios basado en la capacidad, con compromisos de tasa fija, sigue estos pasos:
- Abre la calculadora de precios de Google Cloud.
- Haz clic en BigQuery.
- Haz clic en la pestaña Tasa fija.
- Elige la ubicación en la que se usarán las ranuras.
- Elige el período de Compromiso.
- Especifica la cantidad de ranuras
- Elige la ubicación en la que se almacenarán los datos.
- Ingresa tus estimaciones de uso del almacenamiento para Almacenamiento activo, Almacenamiento a largo plazo, Inserciones de transmisión y Lecturas de transmisión. Solo necesitarás estimar el almacenamiento físico o el almacenamiento lógico, según el modelo de facturación de almacenamiento del conjunto de datos.
- Haz clic en Agregar a la estimación.
Para obtener más información, consulta Precios por capacidad.
Ediciones
Para estimar los costos en la calculadora de precios de Google Cloud con el modelo de precios basado en la capacidad con las ediciones de BigQuery, sigue estos pasos:
- Abre la calculadora de precios de Google Cloud.
- Haz clic en BigQuery.
- Haz clic en la pestaña Ediciones.
- Elige la ubicación en la que se usarán las ranuras.
- Elige tu edición.
- Elige las Cantidad máxima de ranuras, Ranuras base, Compromiso opcional y Uso estimado del ajuste de escala automático.
- Elige la ubicación en la que se almacenarán los datos.
- Ingresa tus estimaciones de uso del almacenamiento para Almacenamiento activo, Almacenamiento a largo plazo, Inserciones de transmisión y Lecturas de transmisión. Solo necesitarás estimar el almacenamiento físico o el almacenamiento lógico, según el modelo de facturación de almacenamiento del conjunto de datos.
- Haz clic en Agregar a la estimación.
Para obtener más información, consulta Precios por capacidad.