Aplica recomendaciones de particiones y clústeres
En este documento se muestra cómo aplicar las recomendaciones de particiones y clústeres a tus tablas de BigQuery.
Limitaciones
El recomendador de partición y agrupamiento en clústeres no admite tablas de BigQuery con SQL heredado. Cuando se genera una recomendación, el recomendador excluye cualquier consulta de SQL heredado en su análisis. Además, la aplicación de recomendaciones de partición en tablas de BigQuery con SQL heredado interrumpe los flujos de trabajo de SQL heredado en esa tabla.
Antes de aplicar las recomendaciones de partición, migra tus flujos de trabajo de SQL heredado a GoogleSQL.
El recomendador de partición y agrupamiento en clústeres no admite recursos almacenados en las siguientes regiones:
europe-central2
,europe-west8
,europe-west9
,europe-west12
,europe-north1
,europe-southwest1
us-east1
,us-east5
,us-south1
me-central1
,me-central2
,me-west1
australia-southeast2
southamerica-west1
Antes de comenzar
- Asegúrate de que la API del recomendador esté habilitada.
- Asegúrate de tener los permisos necesarios de Identity and Access Management (IAM).
Aplica recomendaciones de clústeres
Puedes aplicar las recomendaciones de clústeres si aplicas clústeres a una copia de la tabla original, los aplicas directamente a la tabla original o usas las vistas materializadas.
Aplica recomendaciones de clústeres a una tabla copiada
Cuando aplicas recomendaciones de clústeres a una tabla de BigQuery, primero puedes copiar la tabla original y, luego, aplicar la recomendación a la tabla copiada. Este método garantiza que se conserven los datos originales si necesitas revertir el cambio a la configuración de agrupamiento en clústeres.
Puedes usar este método para aplicar recomendaciones de clústeres a tablas no particionadas y particionadas.
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, crea una tabla vacía con los mismos metadatos (incluidas las especificaciones de agrupamiento en clústeres) de la tabla original mediante el operador
LIKE
:CREATE TABLE DATASET.COPIED_TABLE LIKE DATASET.ORIGINAL_TABLE
Reemplaza lo siguiente:
DATASET
: el nombre del conjunto de datos que contiene la tabla; por ejemplo,mydataset
COPIED_TABLE
: un nombre para tu tabla copiada; por ejemplo,copy_mytable
ORIGINAL_TABLE
: el nombre de tu tabla original; por ejemplo,mytable
En la consola de Google Cloud, abre el editor de Cloud Shell.
En el editor de Cloud Shell, actualiza la especificación de agrupamiento en clústeres de la tabla copiada para que coincida con el agrupamiento en clústeres recomendado mediante el comando
bq update
:bq update --clustering_fields=CLUSTER_COLUMN DATASET.COPIED_TABLE
Reemplaza
CLUSTER_COLUMN
por la columna en la que se agrupa en clústeres, por ejemplo,mycolumn
.También puedes llamar al método
tables.update
otables.patch
de la API para modificar la especificación del agrupamiento en clústeres.En el editor de consultas, recupera el esquema de la tabla con la configuración de partición y agrupamiento en clústeres de la tabla original, si existe. Puedes recuperar el esquema visualizando la vista
INFORMATION_SCHEMA.TABLES
de la tabla original:SELECT ddl FROM DATASET.INFORMATION_SCHEMA.TABLES WHERE table_name = 'DATASET.ORIGINAL_TABLE;'
El resultado es la declaración completa del lenguaje de definición de datos (DDL) de ORIGINAL_TABLE, incluida la cláusula
PARTITION BY
. Para obtener más información sobre los argumentos en tu resultado de DDL, consulta declaraciónCREATE TABLE
.El resultado de DDL indica el tipo de partición en la tabla original:
Tipo de partición Ejemplo de resultado Sin particionar La cláusula PARTITION BY
está ausente.Particionado por columna de tabla PARTITION BY c0
PARTITION BY DATE(c0)
PARTITION BY DATETIME_TRUNC(c0, MONTH)
Particionado por tiempo de transferencia PARTITION BY _PARTITIONDATE
PARTITION BY DATETIME_TRUNC(_PARTITIONTIME, MONTH)
Transfiere datos a la tabla copiada. El proceso que uses se basa en el tipo de partición.
- Si la tabla original no está particionada o está particionada por una columna de tabla, transfiere los datos de la tabla original a la tabla copiada:
INSERT INTO DATASET.COPIED_TABLE SELECT * FROM DATASET.ORIGINAL_TABLE
Si la tabla original se particiona por tiempo de transferencia, sigue estos pasos:
Recupera la lista de columnas para formar la expresión de transferencia de datos mediante la vista
INFORMATION_SCHEMA.COLUMNS
:SELECT ARRAY_TO_STRING(( SELECT ARRAY( SELECT column_name FROM DATASET.INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'ORIGINAL_TABLE')), ", ")
El resultado es una lista separada por comas de los nombres de las columnas.
Transfiere los datos de la tabla original a la tabla copiada:
INSERT DATASET.COPIED_TABLE (COLUMN_NAMES, _PARTITIONTIME) SELECT *, _PARTITIONTIME FROM DATASET.ORIGINAL_TABLE
Reemplaza
COLUMN_NAMES
por la lista de columnas que eran el resultado en el paso anterior, separadas por comas, por ejemplo,col1, col2, col3
.
Ahora tienes una tabla de copia agrupada con los mismos datos que la tabla original. En los siguientes pasos, reemplazarás la tabla original por una tabla recién agrupada.
- Si la tabla original no está particionada o está particionada por una columna de tabla, transfiere los datos de la tabla original a la tabla copiada:
Cambia el nombre de la tabla original al de una tabla de copia de seguridad:
ALTER TABLE DATASET.ORIGINAL_TABLE RENAME TO DATASET.BACKUP_TABLE
Reemplaza
BACKUP_TABLE
por un nombre para la tabla de copia de seguridad, por ejemplo,backup_mytable
.Cambia el nombre de la tabla copiada a la tabla original:
ALTER TABLE DATASET.COPIED_TABLE RENAME TO DATASET.ORIGINAL_TABLE
Ahora, tu tabla original se agrupa en clústeres según la recomendación de clústeres.
- Acceso y permisos, como los permisos de IAM, el acceso a nivel de fila o el acceso a nivel de columna
- Artefactos de tablas, como clonaciones de tablas, instantáneas de tablas o índices de la búsqueda
- El estado de los procesos de tabla en curso, como las vistas materializadas o cualquier trabajo que se haya ejecutado cuando copiaste la tabla
- La capacidad de acceder a los datos históricos de la tabla mediante el viaje en el tiempo
- Cualquier metadato asociado con la tabla original, por ejemplo,
table_option_list
ocolumn_option_list
Para obtener más información, consulta Declaraciones del lenguaje de definición de datos.
Si surge algún problema, debes migrar de forma manual los artefactos afectados a la tabla nueva.
Después de revisar la tabla agrupada, puedes borrar la tabla de copia de seguridad con el siguiente comando:DROP TABLE DATASET.BACKUP_TABLE
Aplica recomendaciones de clústeres directamente
Puedes aplicar recomendaciones de clústeres directamente a una tabla de BigQuery existente. Este método es más rápido que aplicar las recomendaciones a una tabla copiada, pero no conserva una tabla de copia de seguridad.
Sigue estos pasos para aplicar una especificación de agrupamiento en clústeres nueva a tablas no particionadas o particionadas.
En la herramienta de bq, actualiza la especificación de agrupamiento en clústeres de tu tabla para que coincida con el agrupamiento en clústeres nuevo:
bq update --clustering_fields=CLUSTER_COLUMN DATASET.ORIGINAL_TABLE
Reemplaza lo siguiente:
CLUSTER_COLUMN
: la columna en la que se agrupa en clústeres, por ejemplo,mycolumn
DATASET
: el nombre del conjunto de datos que contiene la tabla; por ejemplo,mydataset
ORIGINAL_TABLE
: el nombre de tu tabla original; por ejemplo,mytable
También puedes llamar al método
tables.update
otables.patch
de la API para modificar la especificación del agrupamiento en clústeres.Para agrupar todas las filas según la especificación de agrupamiento en clústeres nueva, ejecuta la siguiente declaración
UPDATE
:UPDATE DATASET.ORIGINAL_TABLE SET CLUSTER_COLUMN=CLUSTER_COLUMN WHERE true
Aplica recomendaciones de clústeres mediante vistas materializadas
Puedes crear una vista materializada de la tabla para almacenar datos de la tabla original con la recomendación aplicada. El uso de vistas materializadas para aplicar recomendaciones garantiza que los datos agrupados en clústeres se mantengan actualizados mediante actualizaciones automáticas. Existen consideraciones de precios para las consultas, el mantenimiento y el almacenamiento de vistas materializadas. Para aprender a crear una vista materializada en clústeres, consulta Vistas materializadas agrupadas en clústeres.Aplica recomendaciones de partición
Puedes aplicar las recomendaciones de partición si aplicas particiones a una copia de la tabla original.
Aplica recomendaciones de partición a una tabla copiada
Cuando aplicas recomendaciones de partición a una tabla de BigQuery, primero puedes copiar la tabla original y, luego, aplicar la recomendación a la tabla copiada. Este enfoque garantiza que se conserven los datos originales si necesitas revertir una partición.
En el siguiente procedimiento, se usa una recomendación de ejemplo para particionar una tabla por la unidad de tiempo de partición DAY
.
Crea una tabla copiada con las recomendaciones de partición:
CREATE TABLE DATASET.COPIED_TABLE PARTITION BY DATE_TRUNC(PARTITION_COLUMN, DAY) AS SELECT * FROM DATASET.ORIGINAL_TABLE
Reemplaza lo siguiente:
DATASET
: el nombre del conjunto de datos que contiene la tabla; por ejemplo,mydataset
COPIED_TABLE
: un nombre para tu tabla copiada; por ejemplo,copy_mytable
PARTITION_COLUMN
: la columna a la que realizas la partición; por ejemplo,mycolumn
Para obtener más información sobre cómo crear tablas particionadas, consulta Crea tablas particionadas.
Cambia el nombre de la tabla original al de una tabla de copia de seguridad:
ALTER TABLE DATASET.ORIGINAL_TABLE RENAME TO DATASET.BACKUP_TABLE
Reemplaza
BACKUP_TABLE
por un nombre para la tabla de copia de seguridad, por ejemplo,backup_mytable
.Cambia el nombre de la tabla copiada a la tabla original:
ALTER TABLE DATASET.COPIED_TABLE RENAME TO DATASET.ORIGINAL_TABLE
La tabla original ahora está particionada según la recomendación de partición.
- Acceso y permisos, como los permisos de IAM, el acceso a nivel de fila o el acceso a nivel de columna
- Artefactos de tablas, como clonaciones de tablas, instantáneas de tablas o índices de la búsqueda
- El estado de los procesos de tabla en curso, como las vistas materializadas o cualquier trabajo que se haya ejecutado cuando copiaste la tabla
- La capacidad de acceder a los datos históricos de la tabla mediante el viaje en el tiempo
- Cualquier metadato asociado con la tabla original, por ejemplo,
table_option_list
ocolumn_option_list
Para obtener más información, consulta Declaraciones del lenguaje de definición de datos. - Capacidad de usar SQL heredado para escribir resultados de consultas en tablas particionadas. El uso de SQL heredado no es compatible por completo en tablas particionadas. Una solución es migrar tus flujos de trabajo de SQL heredado a GoogleSQL antes de aplicar una recomendación de partición.
Si surge algún problema, debes migrar de forma manual los artefactos afectados a la tabla nueva.
Después de revisar la tabla particionada, puedes borrar la tabla de copia de seguridad con el siguiente comando:DROP TABLE DATASET.BACKUP_TABLE
Precios
Cuando aplicas una recomendación a una tabla, puedes generar los siguientes costos:
- Costos de procesamiento. Cuando aplicas una recomendación, ejecutas una consulta de lenguaje de definición de datos (DDL) o de lenguaje de manipulación de datos (DML) en tu proyecto de BigQuery.
- Costos de almacenamiento. Si usas el método de copia de una tabla, usas almacenamiento adicional para la tabla copiada (o la copia de seguridad).
Se aplican cargos de procesamiento y almacenamiento estándar según la cuenta de facturación asociada con el proyecto. Si deseas obtener más información, consulta los Precios de BigQuery.