Indexación de metadatos para tablas de BigQuery

BigQuery indexa automáticamente los metadatos de las columnas de las tablas de BigQuery que superan 1 GiB y usa ese índice para acelerar las consultas. Los metadatos incluyen ubicaciones de archivos, información de partición y atributos a nivel de columna. De forma predeterminada, la indexación es una operación en segundo plano gratuita, pero la actualización del índice depende de los recursos gratuitos disponibles y no tiene objetivos de nivel de servicio (SLO) de rendimiento.

Si la actualización del índice es fundamental para tu carga de trabajo, puedes asignar recursos dedicados configurando una reserva de BACKGROUND. En este documento, se describe cómo supervisar la actualización y el uso de los índices, configurar recursos de indexación dedicados y configurar alertas de indexación.

Visualiza la hora de actualización del índice de metadatos

Para ver la última hora de actualización del índice de metadatos de una tabla, consulta la columna LAST_METADATA_INDEX_REFRESH_TIME de la vista INFORMATION_SCHEMA.TABLE_STORAGE. Para ello, sigue estos pasos:

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

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente oración:

    SELECT
      project_id,
      project_number,
      table_name,
      last_metadata_index_refresh_time
    FROM
      [PROJECT_ID.]region-REGION.INFORMATION_SCHEMA.TABLE_STORAGE;

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud . Si no se especifica, se usa el proyecto predeterminado.
    • REGION: Es la región en la que se encuentra el proyecto, por ejemplo, region-us.
  3. Haz clic en Ejecutar.

Visualiza el uso del índice de metadatos de columnas

Para ver si se usó el índice de metadatos de la columna después de que se completa un trabajo, verifica la propiedad TableMetadataCacheUsage del recurso Trabajo. Si el campo unusedReason está vacío (no se completó), se usó el índice de metadatos de columna. Si se propaga, el campo explanation que lo acompaña proporciona un motivo por el que no se usó el índice de metadatos de la columna.

También puedes ver el uso del índice de metadatos de columna con el campo metadata_cache_statistics en la vista INFORMATION_SCHEMA.JOBS.

Por ejemplo, en el siguiente comando, se muestra el uso del índice de metadatos de columna para el trabajo my-job:

SELECT metadata_cache_statistics
FROM `region-US`.INFORMATION_SCHEMA.JOBS
WHERE job_id = 'my-job';

Como otro ejemplo, a continuación, se muestra la cantidad de trabajos que usaron el índice de metadatos de columna para la tabla my-table:

SELECT COUNT(*)
FROM
  `region-US`.INFORMATION_SCHEMA.JOBS,
  UNNEST(metadata_cache_statistics.table_metadata_cache_usage) AS stats
WHERE
  stats.table_reference.table_id='my-table' AND
  stats.table_reference.dataset_id='my-dataset' AND
  stats.table_reference.project_id='my-project' AND
  stats.unusedReason IS NULL;

Configura recursos de indexación dedicados

Para configurar recursos para las actualizaciones de indexación de metadatos en tu proyecto, primero debes tener una reserva asignada a tu proyecto. Para ello, sigue estos pasos:

  1. Crea una reserva de BACKGROUND. Una reserva BACKGROUND comparte recursos entre trabajos de optimización en segundo plano.
  2. Asigna tu proyecto a la reserva.

Después de configurar tu reserva, selecciona uno de los siguientes métodos para asignar ranuras a tu trabajo de indexación de metadatos. De forma predeterminada, las ranuras que asignas de esta manera se comparten con otros trabajos si están inactivas. Para obtener más información, consulta Ranuras inactivas.

Console

  1. En la consola de Google Cloud , ve a la página Administración de cargas de trabajo.

    Ir a Administración de cargas de trabajo

  2. Haz clic en Acciones de reserva > Crear asignación.

  3. Selecciona tu proyecto de reserva.

  4. Establece Tipo de trabajo en En segundo plano.

  5. Haz clic en Crear.

bq

Usa el comando bq mk

bq mk \
  --project_id=ADMIN_PROJECT_ID \
  --location=LOCATION \
  --reservation_assignment \
  --reservation_id=RESERVATION_NAME \
  --assignee_id=PROJECT_ID \
  --job_type=BACKGROUND \
  --assignee_type=PROJECT

Reemplaza lo siguiente:

  • ADMIN_PROJECT_ID por el ID del proyecto del proyecto de administración que posee el recurso de reserva
  • LOCATION por la ubicación de la reserva.
  • RESERVATION_NAME por el nombre de la reserva.
  • PROJECT_ID: Es el ID del proyecto que se asignará a esta reserva.

SQL

Para asignar una reserva a un proyecto, usa la declaración DDL CREATE ASSIGNMENT.

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

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente sentencia:

    CREATE ASSIGNMENT
    ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID
    OPTIONS (
      assignee = 'projects/PROJECT_ID',
      job_type = 'BACKGROUND');
    Reemplaza lo siguiente:

    • ADMIN_PROJECT_ID por el ID del proyecto del proyecto de administración que posee el recurso de reserva
    • LOCATION por la ubicación de la reserva.
    • RESERVATION_NAME por el nombre de la reserva.
    • ASSIGNMENT_ID por el ID de la asignación. El ID debe ser único para el proyecto y la ubicación, debe empezar y terminar con una letra minúscula o un número, y contener solo letras en minúscula, números y guiones.
    • PROJECT_ID: Es el ID del proyecto que contiene las tablas. Este proyecto está asignado a la reserva.
  3. Haz clic en Ejecutar.

Visualiza la información del trabajo de indexación

Después de configurar tus trabajos de indexación dedicados, puedes ver información sobre ellos con la vista JOBS. En el siguiente ejemplo de SQL, se muestran los cinco trabajos de actualización más recientes en PROJECT_NAME.

SELECT *
FROM
  region-us.INFORMATION_SCHEMA.JOBS
WHERE
  project_id = 'PROJECT_NAME'
  AND SEARCH(job_id, '`metadata_cache_refresh`')
ORDER BY
  creation_time DESC
LIMIT 5;

Reemplaza PROJECT_NAME por el nombre del proyecto que contiene tus trabajos de indexación de metadatos.

Configura alertas de indexación de metadatos

El proceso de alertas de Cloud Monitoring te notifica cuando el rendimiento de BigQuery no cumple con los criterios definidos. Para obtener más información, consulta la descripción general de las alertas. Con la indexación de metadatos, puedes configurar alertas para el uso y la obsolescencia de las ranuras.

Alerta de uso de ranuras

Esta alerta te notifica cuando tu reserva en segundo plano supera un porcentaje definido de su asignación. El valor predeterminado es 95%. Puedes configurar esta alerta para una reserva específica o para cada reserva en segundo plano. Cuando se active esta alerta, te recomendamos que aumentes el tamaño de la reserva.

Para configurar esta alerta para cada reserva en segundo plano, haz lo siguiente:

  1. Configura un canal de notificaciones de Monitoring si aún no lo hiciste.
  2. Ve a la página Integraciones.

    Ir a Integraciones

  3. Busca la integración de BigQuery y haz clic en Ver detalles.

  4. En la pestaña Alertas, selecciona Uso de ranuras: El uso de ranuras de la caché de metadatos en segundo plano es demasiado alto.

  5. Opcional: Para personalizar aún más esta alerta, haz clic en Mostrar opciones > Personalizar política de alertas.

  6. En Configurar notificaciones, selecciona tu canal de notificaciones.

  7. Haz clic en Crear.

Alerta de inactividad

Esta alerta te notifica cuando la inactividad promedio del índice de metadatos de la columna aumenta demasiado en comparación con el promedio existente. El umbral predeterminado es si el promedio de más de 4 horas es más del doble del promedio anterior durante más de 30 minutos. Cuando se active esta alerta, te recomendamos que aumentes el tamaño de la reserva o crees una reserva en segundo plano si no tienes una.

Para configurar esta alerta, haz lo siguiente:

  1. Configura un canal de notificaciones de Monitoring si aún no lo hiciste.
  2. Ve a la página Integraciones.

    Ir a Integraciones

  3. Busca la integración de BigQuery y haz clic en Ver detalles.

  4. En la pestaña Alertas, selecciona Índice de metadatos de columna inactivo: aumento de porcentaje excesivo.

  5. Opcional: Para personalizar aún más esta alerta, haz clic en Mostrar opciones > Personalizar política de alertas.

  6. En Configurar notificaciones, selecciona tu canal de notificaciones.

  7. Haz clic en Crear.

Consideraciones de rendimiento

Si bien BigQuery reduce automáticamente los datos con la partición y el agrupamiento en clústeres, la indexación de metadatos puede optimizar aún más las consultas, ya que reduce los datos en función de las columnas que no se usan para la partición o el agrupamiento en clústeres. La eficacia de esta reducción aumenta cuando hay una dependencia de orden entre la columna de filtro y las columnas de partición o agrupamiento en clústeres de la tabla. En estos casos, es posible que observes menos bytes analizados de lo esperado, incluso cuando se filtran columnas que no forman parte de forma explícita de la configuración de agrupamiento en clústeres de la tabla. Si una tabla solo está particionada, pero no agrupada en clústeres, la eficacia de la reducción es limitada para las consultas a pedido, y es posible que no veas una disminución en los bytes analizados.

Limitaciones

Las mejoras de rendimiento de las consultas de metadatos solo se aplican a las declaraciones SELECT, INSERT y CREATE TABLE AS SELECT. Las sentencias del lenguaje de manipulación de datos (DML) no verán mejoras de la indexación de metadatos.

¿Qué sigue?