Indexação de metadados para tabelas do BigQuery

Este documento descreve a indexação de metadados de colunas no BigQuery e explica como atribuir recursos dedicados para melhorar a atualização dos índices e o desempenho das consultas.

O BigQuery indexa automaticamente os metadados das tabelas do BigQuery que excedam 1 GiB. Estes metadados incluem a localização do ficheiro, informações de partição e atributos ao nível da coluna, que o BigQuery usa para otimizar e acelerar as suas consultas.

Por predefinição, a indexação de metadados no BigQuery é uma operação em segundo plano gratuita e não requer qualquer ação da sua parte. No entanto, a atualização do índice depende dos recursos gratuitos disponíveis e não tem objetivos ao nível do serviço (SLOs) de desempenho. Se a atualização do índice for fundamental para o seu exemplo de utilização, recomendamos que configure uma reserva BACKGROUND.

Veja a hora de atualização do índice de metadados

Para ver a hora da última atualização do índice de metadados de uma tabela, consulte a coluna LAST_METADATA_INDEX_REFRESH_TIME da vista INFORMATION_SCHEMA.TABLE_STORAGE. Para o fazer, siga estes passos:

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

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

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto Google Cloud . Se não for especificado, é usado o projeto predefinido.
    • REGION: a região onde o projeto está localizado, por exemplo, region-us.
  3. Clique em Executar.

Veja a utilização do índice de metadados das colunas

Para ver se o índice de metadados da coluna foi usado após a conclusão de uma tarefa, verifique a propriedade TableMetadataCacheUsage do recurso Job. Se o campo unusedReason estiver vazio (não preenchido), foi usado o índice de metadados da coluna. Se estiver preenchido, o campo explanation associado indica o motivo pelo qual o índice de metadados da coluna não foi usado.

Também pode ver a utilização do índice de metadados das colunas com o campo metadata_cache_statistics na vista INFORMATION_SCHEMA.JOBS.

Por exemplo, o seguinte apresenta a utilização do índice de metadados da coluna para a tarefa:my-job

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

Como outro exemplo, o seguinte apresenta o número de trabalhos que usaram o índice de metadados da 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;

Configure recursos de indexação dedicados

Para configurar recursos para atualizações de indexação de metadados no seu projeto, primeiro tem de ter uma reserva atribuída ao projeto. Para o fazer, siga estes passos:

  1. Crie uma reserva de BACKGROND.
  2. Atribua o seu projeto à reserva.

Depois de configurar a reserva, selecione um dos seguintes métodos para atribuir ranhuras à tarefa de indexação de metadados. Por predefinição, os espaços que atribui desta forma são partilhados com outros trabalhos se estiverem inativos. Para mais informações, consulte Espaços inativos.

Consola

  1. Na Google Cloud consola, aceda à página Gestão de capacidade.

    Aceda à gestão de capacidade

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

  3. Selecione o projeto de reserva.

  4. Defina o Tipo de tarefa como Em 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 o seguinte:

  • ADMIN_PROJECT_ID: o ID do projeto do projeto de administração que detém o recurso de reserva.
  • LOCATION: a localização da reserva.
  • RESERVATION_NAME: o nome da reserva.
  • PROJECT_ID: o ID do projeto a atribuir a esta reserva.

SQL

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

  1. Na Google Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

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

    • ADMIN_PROJECT_ID: o ID do projeto do projeto de administração que detém o recurso de reserva.
    • LOCATION: a localização da reserva.
    • RESERVATION_NAME: o nome da reserva.
    • ASSIGNMENT_ID: o ID da atribuição. O ID tem de ser exclusivo do projeto e da localização, 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.

Veja informações sobre a tarefa de indexação

Depois de configurar as tarefas de indexação dedicadas, pode ver informações sobre as tarefas de indexação com a vista JOBS. O exemplo de SQL seguinte mostra as cinco tarefas 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 as suas tarefas de indexação de metadados.

Configure alertas de indexação de metadados

O processo de alerta do Cloud Monitoring envia-lhe uma notificação quando o desempenho do BigQuery não cumpre os critérios definidos. Para mais informações, consulte o artigo Vista geral dos alertas. Com a indexação de metadados, pode configurar alertas para a utilização de slots e dados desatualizados.

Alerta de utilização de slots

Este alerta envia-lhe uma notificação quando a sua reserva em segundo plano excede uma percentagem definida da respetiva atribuição. O valor predefinido é 95%. Pode configurar este alerta para uma reserva específica ou para todas as reservas em segundo plano. Quando este alerta é acionado, recomendamos que aumente o tamanho da reserva.

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

  1. Configure um canal de notificação de monitorização, caso ainda não o tenha feito.
  2. Aceda à página Integrações.

    Aceda a Integrações

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

  4. No separador Alertas, selecione Utilização de espaços: utilização de espaços da cache de metadados em segundo plano demasiado elevada.

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

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

  7. Clique em Criar.

Alerta de desatualização

Este alerta envia-lhe uma notificação quando a desatualização do índice de metadados da coluna média aumenta demasiado em comparação com a média existente. O limite predefinido é se a média durante 4 horas for mais do dobro da média anterior durante mais de 30 minutos. Quando este alerta é acionado, recomendamos que aumente o tamanho da reserva ou crie uma reserva em segundo plano se não tiver nenhuma.

Para configurar este alerta, faça o seguinte:

  1. Configure um canal de notificação de monitorização, caso ainda não o tenha feito.
  2. Aceda à página Integrações.

    Aceda a Integrações

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

  4. No separador Alertas, selecione Obsoleto do índice de metadados de colunas: aumento percentual excessivo.

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

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

  7. Clique em Criar.

Limitações

Os melhoramentos do desempenho das consultas de metadados aplicam-se apenas às declarações SELECT, INSERT e CREATE TABLE AS SELECT. As declarações da linguagem de manipulação de dados (DML) não vão ver melhorias da indexação de metadados.

O que se segue?