Consulta tablas agrupadas
Filtrar por columnas agrupadas te permite mejorar el rendimiento y reducir los costos cuando consultas tablas agrupadas en BigQuery. Cuando una consulta filtra una o más columnas agrupadas, BigQuery usa la información de agrupamiento para analizar solo los bloques relevantes, un proceso llamado reducción de bloques.
En este documento, se describen los permisos y las prácticas recomendadas para consultar tablas agrupadas, incluido por qué es importante el orden de las columnas agrupadas en tus filtros. Solo puedes consultar tablas agrupadas con GoogleSQL.
Permisos necesarios
Para ejecutar un trabajo de consulta, necesitas el permiso bigquery.jobs.create de Identity and Access Management (IAM) en el proyecto que ejecuta el trabajo de consulta.
Cada una de las siguientes funciones predefinidas de IAM incluye los permisos que necesitas para ejecutar un trabajo de consulta:
roles/bigquery.adminroles/bigquery.jobUserroles/bigquery.user
También necesitas el permiso bigquery.tables.getData en todas las tablas y vistas a las que hace referencia la consulta. Además, cuando consultas una vista, necesitas este permiso en todas las tablas y vistas subyacentes.
Sin embargo, si usas vistas autorizadas o conjuntos de datos autorizados, no necesitas acceso a los datos de origen subyacentes.
Cada uno de los siguientes roles predefinidos de IAM incluye el permiso que necesitas en todas las tablas y vistas a las que hace referencia la consulta:
roles/bigquery.adminroles/bigquery.dataOwnerroles/bigquery.dataEditorroles/bigquery.dataViewer
Para obtener más información de los roles de IAM en BigQuery, consulta Funciones y permisos predefinidos.
Consultar una tabla agrupada en clústeres
Para consultar tablas agrupadas en clústeres, puedes realizar las siguientes acciones:
- Usa la consola de Cloud de Confiance
- Usa el comando
bq queryen la herramienta de línea de comandos de bq - Llama al método
jobs.inserty configura un trabajo de consulta - Usa bibliotecas cliente.
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 bibliotecas cliente.
Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.
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 bibliotecas cliente.
Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.
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 bibliotecas cliente.
Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.
Prácticas recomendadas
Si deseas obtener el mejor rendimiento de las consultas en las tablas agrupadas, utiliza las siguientes recomendaciones.
Para dar contexto, la tabla de muestra que se usa en los ejemplos de las prácticas recomendadas es una tabla agrupada en clústeres que se crea mediante el uso de una declaración DDL. La instrucción DDL crea una tabla llamada ClusteredSalesData. La tabla está agrupada según las siguientes columnas: customer_id, product_id, order_id, en ese orden de clasificación.
CREATE TABLE `mydataset.ClusteredSalesData` PARTITION BY DATE(timestamp) CLUSTER BY customer_id, product_id, order_id AS SELECT * FROM `mydataset.SalesData`
Filtra columnas agrupadas según el orden de clasificación
Cuando especifiques un filtro, usa expresiones que filtren las columnas agrupadas en el orden de clasificación. El orden es la clasificación de columna que se proporciona en la cláusula CLUSTER BY.
Para obtener los beneficios del agrupamiento en clústeres, incluye una o más de las columnas agrupadas
en orden de izquierda a derecha, comenzando con la primera columna. En la mayoría
de los casos, la primera columna de agrupamiento en clústeres es la más eficaz para la eliminación de bloques,
seguida de la segunda y la tercera. Aún puedes usar la segunda
o tercera columna sola en la consulta, pero es probable que la reducción de bloques
no sea tan eficaz. El orden de los nombres de columna dentro de la expresión de filtro
no afecta el rendimiento.
En el siguiente ejemplo, se consulta la tabla agrupada en clústeres ClusteredSalesData que se creó en el ejemplo anterior. La siguiente consulta incluye una expresión de filtro que filtra por customer_id y, luego, por product_id. Para optimizar el rendimiento, esta consulta filtra las columnas agrupadas en orden (el orden de las columnas que se proporciona en la cláusula CLUSTER BY).
SELECT SUM(totalSale) FROM `mydataset.ClusteredSalesData` WHERE customer_id = 10000 AND product_id LIKE 'gcp_analytics%'
La siguiente consulta no filtra las columnas agrupadas en el orden de clasificación. Como resultado, el rendimiento de la consulta no es óptimo. Esta consulta filtra por product_id y, luego, por order_id (se omite customer_id).
SELECT SUM(totalSale) FROM `mydataset.ClusteredSalesData` WHERE product_id LIKE 'gcp_analytics%' AND order_id = 20000
No uses columnas agrupadas en expresiones de filtro complejas
Si usas una columna agrupada en una expresión de filtro compleja, el rendimiento de la consulta no se optimiza, porque la reducción de bloques no se puede aplicar.
Por ejemplo, la siguiente consulta no reducirá bloques porque una columna agrupada en clústeres (customer_id) está en uso en una función en la expresión de filtro.
SELECT SUM(totalSale) FROM `mydataset.ClusteredSalesData` WHERE CAST(customer_id AS STRING) = "10000"
A fin de optimizar el rendimiento de la consulta mediante la reducción de bloques, usa expresiones de filtro simples, como las siguientes. En este ejemplo, se aplica un filtro simple a la columna agrupada en clústeres: customer_id.
SELECT SUM(totalSale) FROM `mydataset.ClusteredSalesData` WHERE customer_id = 10000
No compares columnas agrupadas con otras columnas
Si una expresión de filtro compara una columna agrupada con otra columna (sea una columna agrupada o no agrupada), el rendimiento de la consulta no se optimiza, porque la reducción de bloques no se puede aplicar.
La siguiente consulta no reduce los bloques porque la expresión de filtro compara una columna agrupada en clústeres (customer_id) con otra columna (order_id).
SELECT SUM(totalSale) FROM `mydataset.ClusteredSalesData` WHERE customer_id = order_id
Seguridad de las tablas
Para controlar el acceso a las tablas en BigQuery, consulta Controla el acceso a los recursos con IAM.
¿Qué sigue?
- Para obtener más información sobre cómo ejecutar consultas, revisa Ejecuta consultas interactivas y por lotes.
- Para aprender a crear y utilizar tablas agrupadas en clústeres, consulta Crea y usa tablas agrupadas.
- Para obtener una descripción general de la compatibilidad con tablas particionadas en BigQuery, consulta Introducción a las tablas particionadas.
- Para aprender a crear tablas particionadas, consulta Crea tablas particionadas.