Introducción a las tablas agrupadas en clústeres
Las tablas agrupadas en clústeres de BigQuery son tablas que tienen un orden de clasificación de columnas definido por el usuario mediante columnas de clúster. Las tablas agrupadas en clústeres pueden mejorar el rendimiento de las consultas y reducir sus costes.
En BigQuery, una columna de clúster es una propiedad de tabla definida por el usuario que ordena los bloques de almacenamiento según los valores de las columnas de clúster. Los bloques de almacenamiento se dimensionan de forma adaptativa en función del tamaño de la tabla. La colocación se produce a nivel de los bloques de almacenamiento, no a nivel de las filas individuales. Para obtener más información sobre la colocación en este contexto, consulte Clustering (Agrupación).
Una tabla agrupada mantiene las propiedades de ordenación en el contexto de cada operación que la modifica. Las consultas que filtran o agregan datos por las columnas de clúster solo analizan los bloques relevantes en función de las columnas de clúster, en lugar de toda la tabla o partición de tabla. Por lo tanto, es posible que BigQuery no pueda estimar con precisión los bytes que procesará la consulta ni los costes de la consulta, pero intentará reducir el total de bytes en la ejecución.
Cuando agrupas una tabla en clústeres con varias columnas, el orden de las columnas determina qué columnas tienen prioridad cuando BigQuery ordena y agrupa los datos en bloques de almacenamiento, como se muestra en el siguiente ejemplo. En la tabla 1 se muestra el diseño de los bloques de almacenamiento lógicos de una tabla no agrupada. En comparación, la tabla 2 solo está agrupada en clústeres por la columna Country
, mientras que la tabla 3 está agrupada en clústeres por varias columnas, Country
y Status
.
Cuando consultas una tabla agrupada en clústeres, no recibes una estimación precisa del coste de la consulta antes de ejecutarla, ya que no se conoce el número de bloques de almacenamiento que se van a analizar. El coste final se determina una vez que se ha completado la ejecución de la consulta y se basa en los bloques de almacenamiento específicos que se han analizado.
Cuándo usar el agrupamiento en clústeres
La agrupación en clústeres aborda cómo se almacena una tabla, por lo que suele ser una buena primera opción para mejorar el rendimiento de las consultas. Por lo tanto, siempre debes tener en cuenta la opción de agrupar los datos, ya que ofrece las siguientes ventajas:
- Es probable que las tablas sin particiones de más de 64 MB se beneficien del clustering. Del mismo modo, es probable que las particiones de tablas de más de 64 MB también se beneficien del agrupamiento en clústeres. Se pueden agrupar en clústeres tablas o particiones más pequeñas, pero la mejora del rendimiento suele ser insignificante.
- Si tus consultas suelen filtrar por columnas concretas, la agrupación en clústeres acelera las consultas porque solo analiza los bloques que coinciden con el filtro.
- Si tus consultas filtran columnas que tienen muchos valores distintos (alta cardinalidad), el agrupamiento en clústeres acelera estas consultas proporcionando a BigQuery metadatos detallados sobre dónde obtener los datos de entrada.
- La agrupación en clústeres permite que los bloques de almacenamiento subyacentes de tu tabla se ajusten de forma adaptativa en función del tamaño de la tabla.
Además de la agrupación en clústeres, puedes crear particiones en tu tabla. Con este enfoque, primero segmenta los datos en particiones y, a continuación, los agrupa en clústeres dentro de cada partición por las columnas de clustering. Considera este enfoque en las siguientes circunstancias:
- Necesitas una estimación estricta del coste de la consulta antes de ejecutarla. El coste de las consultas en tablas agrupadas en clústeres solo se puede determinar después de ejecutar la consulta. La creación de particiones proporciona estimaciones de costes de consultas granulares antes de ejecutar una consulta.
- Si particiona la tabla, el tamaño medio de las particiones será de al menos 10 GB por partición. Si creas muchas particiones pequeñas, aumentarán los metadatos de la tabla y se puede ver afectado el tiempo de acceso a los metadatos al consultar la tabla.
- Necesitas actualizar tu tabla continuamente, pero quieres aprovechar los precios del almacenamiento a largo plazo. La creación de particiones permite que cada partición se considere por separado para determinar si cumple los requisitos de los precios a largo plazo. Si tu tabla no está particionada, no se debe editar durante 90 días consecutivos para que se pueda aplicar el precio de almacenamiento a largo plazo.
Para obtener más información, consulta Combinar tablas agrupadas y con particiones.
Tipos de columnas de clúster y orden
En esta sección se describen los tipos de columnas y cómo funciona el orden de las columnas en la creación de clústeres de tablas.
Tipos de columnas de clúster
Las columnas de clúster deben ser columnas de nivel superior no repetidas de uno de los siguientes tipos:
BIGNUMERIC
BOOL
DATE
DATETIME
GEOGRAPHY
INT64
NUMERIC
RANGE
STRING
TIMESTAMP
Para obtener más información sobre los tipos de datos, consulta Tipos de datos de GoogleSQL.
Orden de las columnas de agrupación
El orden de las columnas agrupadas en clústeres afecta al rendimiento de las consultas. En el siguiente ejemplo, la tabla Orders
se agrupa en clústeres mediante un orden de clasificación de columnas de Order_Date
, Country
y Status
. La primera columna agrupada en clústeres de este ejemplo es Order_Date
, por lo que una consulta que filtre por Order_Date
y Country
se optimizará para la agrupación en clústeres, mientras que una consulta que filtre solo por Country
y Status
no se optimizará.
Recorte de bloques
Las tablas agrupadas en clústeres pueden ayudarte a reducir los costes de las consultas, ya que reducen los datos para que las consultas no los procesen. Este proceso se denomina "recorte de bloques". BigQuery ordena los datos de las tablas agrupadas en clústeres según los valores de las columnas de este tipo de agrupamiento y los organiza en bloques.
Si ejecutas una consulta en una tabla agrupada en clústeres y la consulta tiene un filtro de las columnas agrupadas de dicha forma, BigQuery emplea la expresión del filtro y los metadatos de los bloques para recortar los bloques que analiza dicha consulta. De ese modo, BigQuery se limita a analizar solo los bloques que sean relevantes.
Los bloques recortados no se analizan. Para calcular los bytes de datos que procesa la consulta, solo se tienen en cuenta los bloques analizados. El número de bytes que procesa una consulta sobre una tabla agrupada en clústeres equivale a la suma de bytes leídos en cada columna de los bloques analizados a la que hace referencia la consulta.
Si una consulta que aplica varios filtros hace varias referencias a una tabla agrupada en clústeres, BigQuery cobra por analizar las columnas de los bloques correspondientes con cada uno de los filtros. Para ver un ejemplo de cómo funciona la poda de bloques, consulta el ejemplo.
Combinar tablas agrupadas en clústeres y con particiones
Puede combinar la agrupación en clústeres de tablas con el particionado de tablas para conseguir una ordenación detallada y optimizar aún más las consultas.
En una tabla con particiones, los datos se almacenan en bloques físicos, cada uno de los cuales contiene una partición de datos. Cada tabla particionada mantiene varios metadatos sobre las propiedades de ordenación en todas las operaciones que la modifican. Los metadatos permiten a BigQuery estimar con mayor precisión el coste de una consulta antes de que se ejecute. Sin embargo, la creación de particiones requiere que BigQuery mantenga más metadatos que con una tabla sin particiones. A medida que aumenta el número de particiones, también lo hace la cantidad de metadatos que se deben mantener.
Si creas una tabla agrupada en clústeres y con particiones, puedes conseguir una ordenación más precisa, como se muestra en el siguiente diagrama:
Ejemplo
Imaginemos que tienes una tabla ClusteredSalesData
que cuenta con particiones por la columna timestamp
y que está agrupada en clústeres por la columna customer_id
. Los datos están organizados en el siguiente conjunto de bloques:
Identificador de partición | ID de 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 |
Decides ejecutar en la tabla la consulta que aparece a continuación, que incluye 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 anterior implica los siguientes pasos:
- Analiza las columnas
timestamp
,customer_id
ytotalSale
de los bloques B2 y B4. - Recorta el bloque B3 por el predicado de filtrado
DATE(timestamp) = "2016-05-01"
de la columna con particióntimestamp
. - Recorta el bloque B1 por el predicado de filtrado
customer_id BETWEEN 20000 AND 23000
de la columna agrupada en clústerescustomer_id
.
Reagrupación automática
A medida que se añaden datos a una tabla agrupada, los nuevos datos se organizan en bloques, lo que puede crear nuevos bloques de almacenamiento o actualizar los que ya existen. La optimización de bloques es necesaria para que las consultas y el almacenamiento tengan un rendimiento óptimo, ya que es posible que los datos nuevos no se agrupen con los datos que ya existen y que tienen los mismos valores de clúster.
Para mantener las características de rendimiento de una tabla agrupada en clústeres, BigQuery vuelve a agruparla automáticamente en segundo plano. En las tablas particionadas, la agrupación en clústeres se mantiene para los datos que se encuentran en el ámbito de cada partición.
Limitaciones
- Solo se admite GoogleSQL para consultar tablas agrupadas y para escribir resultados de consultas en tablas agrupadas.
- Solo puedes especificar hasta cuatro columnas de clustering. Si necesitas columnas adicionales, te recomendamos que combines la agrupación en clústeres con la partición.
- Cuando se usan columnas de tipo
STRING
para el agrupamiento en clústeres, BigQuery solo usa los primeros 1024 caracteres para agrupar los datos. Los valores de las columnas pueden tener más de 1024 caracteres. - Si modifica una tabla no agrupada para que sea agrupada, los datos no se agrupan automáticamente. Solo los datos nuevos que se almacenan mediante las columnas agrupadas están sujetos a la reagrupación automática. Para obtener más información sobre cómo volver a agrupar datos con una instrucción
UPDATE
, consulta Modificar la especificación de la agrupación en clústeres.
Cuotas y límites de las tablas agrupadas en clústeres
BigQuery restringe el uso de recursos compartidos Google Cloud con cuotas y límites, incluidas las limitaciones en determinadas operaciones de tablas o en el número de tareas que se ejecutan en un día.
Cuando usas la función de tabla agrupada en clústeres con una tabla con particiones, estás sujeto a los límites de las tablas con particiones.
Las cuotas y los límites también se aplican a los distintos tipos de tareas que puedes ejecutar en tablas agrupadas. Para obtener información sobre las cuotas de tareas que se aplican a tus tablas, consulta Tareas en "Cuotas y límites".
Precios de las tablas agrupadas en clústeres
Si creas tablas agrupadas en clústeres para usarlas en BigQuery, los cargos se basan en la cantidad de datos almacenados en ellas y en las consultas que realizas en los datos. Para obtener más información, consulta los precios del almacenamiento y los precios de las consultas.
Al igual que otras operaciones con tablas de BigQuery, las operaciones con tablas agrupadas aprovechan las operaciones gratuitas de BigQuery, como la carga por lotes, la copia de tablas, el reagrupamiento automático y la exportación de datos. Estas operaciones están sujetas a las cuotas y límites de BigQuery. Para obtener información sobre las operaciones gratuitas, consulta Operaciones gratuitas.
Para ver un ejemplo detallado de los precios de las tablas agrupadas en clústeres, consulta Estimar los costes de almacenamiento y de consulta.
Seguridad de las tablas
Para controlar el acceso a las tablas de BigQuery, consulta el artículo sobre cómo controlar el acceso a los recursos con la gestión de identidades y accesos.
Siguientes pasos
- Para saber cómo crear y usar tablas agrupadas en clústeres, consulta el artículo Crear y usar tablas agrupadas en clústeres.
- Para obtener información sobre cómo consultar tablas agrupadas en clústeres, consulta Consultar tablas agrupadas en clústeres.