Indexação de metadados para tabelas do BigQuery

O BigQuery indexa automaticamente os metadados de colunas para tabelas do BigQuery maiores que 1 GiB e usa esse índice para acelerar as consultas. Os metadados incluem locais de arquivos, informações de particionamento e atributos no nível da coluna. Por padrão, a indexação é uma operação em segundo plano sem custo financeiro, mas a atualização do índice depende dos recursos livres disponíveis e não tem objetivos de nível de serviço (SLOs) de desempenho.

Se a atualização do índice for essencial para sua carga de trabalho, aloque recursos dedicados configurando uma reserva de BACKGROUND. Neste documento, descrevemos como monitorar a atualização e o uso do índice, configurar recursos de indexação dedicados e configurar alertas de indexação.

Ver o horário de atualização do índice de metadados

Para ver o horário da última atualização do índice de metadados de uma tabela, consulte a coluna LAST_METADATA_INDEX_REFRESH_TIME da visualização INFORMATION_SCHEMA.TABLE_STORAGE. Para isso, faça o seguinte:

  1. No console do Cloud de Confiance , acesse a página BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

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

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Cloud de Confiance by S3NS . Se não for especificado, o projeto padrão será usado.
    • REGION: a região em que o projeto está localizado, por exemplo, region-us.
  3. Clique em Executar.

Ver o uso do índice de metadados de colunas

Para conferir se o índice de metadados da coluna foi usado após a conclusão de um job, verifique a propriedade TableMetadataCacheUsage do recurso Job. Se o campo unusedReason estiver vazio (não preenchido), o índice de metadados da coluna foi usado. Se ele estiver preenchido, o campo explanation associado vai fornecer um motivo para o índice de metadados da coluna não ter sido usado.

Também é possível conferir o uso do índice de metadados de coluna com o campo metadata_cache_statistics na visualização INFORMATION_SCHEMA.JOBS.

Por exemplo, o comando a seguir mostra o uso do índice de metadados de coluna para o job my-job:

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

Como outro exemplo, o seguinte mostra o número de jobs que usaram o índice de metadados de coluna para a tabela 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;

Configurar recursos de indexação dedicados

Para configurar recursos para atualizações de indexação de metadados no projeto, primeiro é necessário ter uma reserva atribuída ao projeto. Para isso, faça o seguinte:

  1. Crie uma reserva do BACKGROUND. Uma reserva BACKGROUND compartilha recursos entre jobs de otimização em segundo plano.
  2. Atribua o projeto à reserva.

Depois de configurar a reserva, selecione um dos métodos a seguir para atribuir slots ao job de indexação de metadados. Por padrão, os slots alocados dessa maneira são compartilhados com outros jobs se estiverem inativos. Para mais informações, consulte Slots inativos.

Console

  1. No console do Cloud de Confiance , acesse a página Gerenciamento de cargas de trabalho.

    Acesse Gerenciamento de cargas de trabalho

  2. Clique em Ações de reserva > Criar atribuição.

  3. Selecione o projeto de reserva.

  4. Defina Tipo de serviço como Segundo plano.

  5. Clique em Criar.

bq

Use o 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

Substitua:

  • ADMIN_PROJECT_ID: o ID do projeto de administração que é proprietário do recurso de reserva.
  • LOCATION: o local da reserva.
  • RESERVATION_NAME: o nome da reserva.
  • PROJECT_ID: o ID do projeto a ser atribuído a essa reserva.

SQL

Para atribuir uma reserva a um projeto, use a instrução DDL CREATE ASSIGNMENT.

  1. No console do Cloud de Confiance , acesse a página BigQuery.

    Acessar o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

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

    • ADMIN_PROJECT_ID: o ID do projeto de administração que é proprietário do recurso de reserva.
    • LOCATION: o local da reserva.
    • RESERVATION_NAME: o nome da reserva.
    • ASSIGNMENT_ID: o ID da atribuição. Ele precisa ser exclusivo do projeto e do local, começar e terminar com uma letra minúscula ou um número e conter apenas letras minúsculas, números e traços.
    • PROJECT_ID: o ID do projeto que contém as tabelas. Este projeto está atribuído à reserva.
  3. Clique em Executar.

Ver informações do job de indexação

Depois de configurar os jobs de indexação dedicados, é possível ver informações sobre eles com a visualização JOBS. O exemplo de SQL a seguir mostra os cinco jobs de atualização mais recentes em 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;

Substitua PROJECT_NAME pelo nome do projeto que contém os jobs de indexação de metadados.

Configurar alertas de indexação de metadados

O processo de alerta do Cloud Monitoring notifica você quando o desempenho do BigQuery não atende aos critérios definidos. Para mais informações, consulte Visão geral de alertas. Com a indexação de metadados, é possível configurar alertas para uso de slots e desatualização.

Alerta de uso de slots

Esse alerta notifica você quando a reserva em segundo plano excede uma porcentagem definida da alocação. O valor padrão é 95%. É possível configurar esse alerta para uma reserva específica ou para todas as reservas em segundo plano. Quando esse alerta for acionado, recomendamos que você aumente o tamanho da reserva.

Para configurar esse alerta para todas as reservas em segundo plano, faça o seguinte:

  1. Configure um canal de notificação do Monitoring, caso ainda não tenha feito isso.
  2. Acesse a página Integrações.

    Acessar "Integrações"

  3. Encontre a integração do BigQuery e clique em Ver detalhes.

  4. Na guia Alertas, selecione Uso de slots: o uso de slots do cache de metadados em segundo plano está muito alto.

  5. Opcional: para personalizar ainda mais esse alerta, clique em Mostrar opções > Personalizar política de alertas.

  6. Em Configurar notificações, selecione seu canal de notificação.

  7. Clique em Criar.

Alerta de desatualização

Esse alerta notifica você quando a desatualização média do índice de metadados da coluna aumenta muito em comparação com a média atual. O limite padrão é quando a média de 4 horas é mais que o dobro da média anterior por mais de 30 minutos. Quando esse alerta for acionado, recomendamos que você aumente o tamanho da reserva ou crie uma reserva em segundo plano, se não tiver uma.

Para configurar esse alerta, faça o seguinte:

  1. Configure um canal de notificação do Monitoring, caso ainda não tenha feito isso.
  2. Acesse a página Integrações.

    Acessar "Integrações"

  3. Encontre a integração do BigQuery e clique em Ver detalhes.

  4. Na guia Alertas, selecione Índice de metadados de coluna desatualizado: aumento percentual excessivo.

  5. Opcional: para personalizar ainda mais esse alerta, clique em Mostrar opções > Personalizar política de alertas.

  6. Em Configurar notificações, selecione seu canal de notificação.

  7. Clique em Criar.

Considerações sobre desempenho

Embora o BigQuery remova dados automaticamente usando particionamento e clustering, a indexação de metadados pode otimizar ainda mais as consultas removendo dados com base em colunas que não são usadas para particionamento ou clustering. A eficácia dessa remoção aumenta quando há uma dependência de ordenação entre a coluna de filtro e as colunas de particionamento ou clustering da tabela. Nesses casos, talvez você observe menos bytes verificados do que o esperado, mesmo ao filtrar colunas que não fazem parte explicitamente da configuração de clustering da tabela. Se uma tabela for apenas particionada, mas não em cluster, a eficácia da remoção será limitada para consultas sob demanda, e talvez você não veja uma redução nos bytes verificados.

Limitações

As melhorias de desempenho de consulta de metadados se aplicam apenas às instruções SELECT, INSERT e CREATE TABLE AS SELECT. As instruções da linguagem de manipulação de dados (DML) não vão ter melhorias com a indexação de metadados.

A seguir