Pular para o conteúdo principal

Índices secundários no Unity Catalog tabelas

info

Beta

Este recurso está em versão Beta. Os administradores do espaço de trabalho podem controlar o acesso a este recurso na página de Pré-visualizações . Veja as prévias do Gerenciador Databricks.

Um índice secundário acelera as pesquisas seletivas em uma coluna de uma tabela de gerenciamento Delta Lake ou Iceberg . Quando o mecanismo de consulta do Databricks determina que um índice secundário pode ajudar, ele o utiliza automaticamente para ignorar arquivos e linhas que não podem conter dados correspondentes. Os índices podem reduzir significativamente a quantidade de dados verificados em tabelas grandes.

Os índices secundários complementam clustering Liquid, que organiza a estrutura física dos seus dados. Um índice secundário permite otimizações adicionais de consulta sem alterar a estrutura física da tabela. Isso é útil quando sua carga de trabalho exige pesquisas seletivas em uma coluna que não faz parte da key clustering .

importante

Os índices criados durante a versão Beta não são compatíveis com os índices criados em versões posteriores. Quando o recurso atingir a versão prévia pública, você deverá excluir os índices existentes e criar novos.

Requisitos

Os índices secundários têm requisitos de compute, permissões de tabela base e esquema, além de configuração da tabela base.

compute

Os índices secundários estão disponíveis apenas no Databricks Runtime 18.2 e versões superiores, e você precisa habilitar esse recurso Beta nas configurações do seu workspace . Veja as prévias do Gerenciador Databricks.

Permissões

Para criar um índice secundário:

  • Você deve ter a permissão MODIFY para a tabela referenciada no índice.
  • Você deve ter a permissão CREATE TABLE no esquema pai. Um proprietário de esquema ou usuário com o privilégio MANAGE pode conceder a você privilégios CREATE TABLE no esquema.

Configuração da tabela

Antes de criar um índice secundário, a tabela base deve satisfazer todos os seguintes requisitos:

  • Você deve criar o índice no mesmo catálogo e esquema da tabela base.
  • A mesa é um gerô Delta Lake ou um gerô Iceberg .
  • O envio de linha está habilitado (delta.enableRowTracking = true). Veja Acompanhamento de linha no Databricks.
  • A coluna a ser indexada deve ser de um tipo de dados suportado: tipos numéricos, STRING, CHAR(n), VARCHAR(n) ou TIMESTAMP.
  • A tabela não utiliza nenhum recurso da lista de limitações, incluindo: Delta Sharing, clonagem superficial, controles de acesso baseados em atributos, políticas de segurança em nível de linha e máscaras de coluna. Consulte as limitações.

Para obter informações sobre os requisitos de protocolo de tabela, que se aplicam tanto às tabelas Delta Lake quanto às Iceberg , consulte Compatibilidade e protocolos de recursosDelta Lake.

Criar um índice secundário

É possível criar até quatro índices em uma única tabela, cada um em uma coluna diferente. O limite de quatro índices é comum tanto aos índices secundários quanto aos índices de busca de texto completo. Consulte os índices de pesquisa de texto completo no Unity Catalog gerencia tabelas.

Use CREATE INDEX para criar um índice secundário em uma única coluna, por exemplo, na coluna user_id de uma tabela existente, events:

SQL
CREATE INDEX user_id_idx
ON events (user_id);

A sintaxe completa é:

SQL
CREATE INDEX [IF NOT EXISTS] index_name
ON table_name ( column_name )

index_name Deve ser único dentro do esquema pai e não pode corresponder a um nome de tabela existente.

atenção

Se CREATE INDEX ou REFRESH INDEX falharem durante a execução, execute REFRESH INDEX para recuperar de uma falha parcial.

Consultar uso de dados em um índice secundário

Quando existe um índice secundário em uma tabela, o mecanismo de consulta do Databricks o utiliza automaticamente para acelerar consultas com predicados seletivos na coluna indexada.

Os tipos de predicados suportados incluem:

  • Igualdade: =
  • Associação definida: IN

Por exemplo, se você tiver um índice secundário user_id_idx na coluna user_id, o índice acelera as consultas que realizam buscas por um usuário específico:

SQL
SELECT * FROM events
WHERE user_id = '019982fe-002a-7621-8c20-b332eeb71f44';

gerenciar índices

importante

Se a tabela base for alterada, os índices secundários não serão atualizados automaticamente. Veja atualizar um índice.

O Databricks mantém a correção das consultas, independentemente da atualização do índice. Quando uma tabela contém dados não indexados, a consulta usa o índice existente para acelerar o acesso aos registros indexados e realiza uma varredura da tabela para os registros não indexados.

Utilize as seguintes operações para gerenciar índices secundários:

Descreva ou view um índice.

Para view informações sobre um índice:

SQL
DESCRIBE INDEX user_id_idx;

atualizar um índice

Quando a tabela base é alterada, os índices secundários não são atualizados automaticamente.

Para atualizar o índice, adicione entradas para novas linhas:

SQL
REFRESH INDEX user_id_idx;

REFRESH INDEX É uma operação incremental, somente de acréscimo. Ele indexa novos dados, mas não remove entradas de linhas excluídas.

Para atualizar o índice, adicionando entradas para novas linhas e removendo entradas para linhas excluídas, use REFRESH INDEX ... FULL:

SQL
REFRESH INDEX user_id_idx FULL;

Uma refresh completa requer mais recursos compute do que uma refresh incremental. Com o tempo, as atualizações incrementais acumulam entradas obsoletas, o que aumenta o tamanho do índice e afeta negativamente o desempenho.

Remover um índice

Para eliminar um índice, execute o seguinte:

SQL
DROP INDEX user_id_idx;

Para evitar erros devido à falta de índices, utilize:

SQL
DROP INDEX IF EXISTS user_id_idx;
nota

Se você excluir a tabela base, o comando também excluirá os índices secundários.

Limitações

Os índices secundários apresentam as seguintes limitações:

  • Não é possível renomear uma coluna indexada na tabela base nem alterar seu tipo de dados. Em vez disso, você deve remover o índice, alterar a coluna e, em seguida, recriar o índice.
  • Tabelas com Delta Sharing não são suportadas. Se você adicionar a tabela base como uma origem ou destino Delta Sharing após criar o índice, Databricks ignorará o índice secundário.
  • Tabelas com clones superficiais não são suportadas. Se você adicionar a tabela base como uma fonte de clonagem superficial após criar o índice, o Databricks ignorará o índice secundário.
  • Tabelas com controles de acesso baseados em atributos, máscaras de coluna ou políticas de segurança em nível de linha não são suportadas. Se você adicionar qualquer um desses controles a uma tabela com um índice secundário, o Databricks ignorará o índice secundário. Consulte Conceitos básicos para controle de acesso baseado em atributos (ABAC).