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.

BigQuery ordena los datos de las tablas agrupadas en clústeres para mejorar el rendimiento de las consultas.

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á.

Las consultas en tablas agrupadas en clústeres deben incluir columnas agrupadas en clústeres en orden, empezando por la primera.

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:

Comparar tablas que no están agrupadas en clústeres ni particionadas con tablas que sí lo están.

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 y totalSale 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ón timestamp.
  • Recorta el bloque B1 por el predicado de filtrado customer_id BETWEEN 20000 AND 23000 de la columna agrupada en clústeres customer_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