Estima los costos de almacenamiento y consultas
En BigQuery, las consultas a pedido se cobran en función de la cantidad de bytes leídos. Para ver los precios de las consultas a pedido, consulta la página Precios.
Para estimar los costos antes de ejecutar una consulta, puedes usar uno de los siguientes métodos:
- El validador de consultas en Cloud Console
- 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 la API - La calculadora de precios de Google Cloud
- Bibliotecas cliente
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.
Estima los costos de las consultas
Para estimar los costos de las consultas, haz lo siguiente:
Console
Cuando ingresas una consulta en Cloud Console, 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. Si deseas obtener más información, consulta la documentación de referencia de la API de Go de BigQuery.
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.
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 Node.js de BigQuery.
Python
Antes de probar esta muestra, 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. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.
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.
Estima los costos de las consultas con la calculadora de precios de Google Cloud
Para estimar los costos de las consultas a pedido en la calculadora de precios de Google Cloud, ingresa la cantidad de bytes que procesa la consulta en B, KB, MB, GB, TB o PB. Si tu consulta procesa menos de 1 TB, la estimación es de $0 porque BigQuery proporciona 1 TB de procesamiento de consultas a pedido gratis por mes.
Para estimar el costo de una consulta con la calculadora de precios, 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
0
en el campo Almacenamiento. - 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.
En este caso, la cantidad de bytes que leyó la consulta es menor que 1 TB de procesamiento a pedido proporcionado a través del nivel gratuito. Como resultado, el costo estimado es de $0.
Incluye precios de tasa fija en la calculadora de precios
Si tienes precios de tasa fija aplicados a tu cuenta de facturación, puedes hacer clic en la pestaña Flat-Rate (Tasa fija), elegir tu plan de tasa fija y agregar tus costos de almacenamiento a la estimación.
Para obtener más información, consulta Precios con tarifa plana.
Estima los costos de almacenamiento con la calculadora de precios de Google Cloud
Para calcular los costos de almacenamiento en la calculadora de precios de Google Cloud , ingresa la cantidad de bytes que se almacenan como B, KB, MB, GB, TB o PB. BigQuery proporciona 10 GB de almacenamiento gratuito por mes.
Para estimar los costos de almacenamiento con la calculadora de precios, 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
100
en el campo Almacenamiento. Deja la medida establecida enGB
. - 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.
Cálculo del tamaño de la consulta
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 de las columnas a las que se hace referencia en las tablas que se analizaron en la consulta.
- t = la suma de bytes de todas las columnas en la tabla actualizada en el momento en que comienza la consulta, sin importar si se hace referencia a esas columnas o se modifican en la consulta.
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 de las columnas a las que se hace referencia en todas las particiones que se analizaron en la consulta.
- t = la suma de bytes de todas las columnas en las particiones actualizadas o analizadas de las filas actualizadas, en el momento en que comienza la consulta, sin importar si se hace referencia a esas columnas o se modifican en la consulta.
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
Las tablas temporales no generan cargos por almacenamiento mientras se ejecuta una consulta de varias declaraciones. Sin embargo, se aplican precios regulares a cualquier declaración que las cree, modifique o consulte.
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: