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

  1. Asegúrate de que la API del recomendador esté habilitada.
  2. 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.

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. 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
  3. En la consola de Google Cloud, abre el editor de Cloud Shell.

    Activar Cloud Shell

  4. 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 o tables.patch de la API para modificar la especificación del agrupamiento en clústeres.

  5. 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ón CREATE 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)
  6. 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:

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

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

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

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

Te recomendamos que revises la tabla agrupada en clústeres para asegurarte de que todas las funciones de la tabla funcionen según lo previsto. Es probable que muchas funciones de tabla estén vinculadas al ID de la tabla y no a su nombre, por lo que es mejor revisar las siguientes funciones de la tabla antes de continuar:

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.

  1. 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 o tables.patch de la API para modificar la especificación del agrupamiento en clústeres.

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

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

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

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

Te recomendamos que revises la tabla particionada para asegurarte de que todas las funciones de la tabla funcionan según lo previsto. Es probable que muchas funciones de tabla estén vinculadas al ID de la tabla y no a su nombre, por lo que es mejor revisar las siguientes funciones de la tabla antes de continuar:

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.