Índices secundários no Unity Catalog tabelas
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 .
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
MODIFYpara a tabela referenciada no índice. - Você deve ter a permissão
CREATE TABLEno esquema pai. Um proprietário de esquema ou usuário com o privilégioMANAGEpode conceder a você privilégiosCREATE TABLEno 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)ouTIMESTAMP. - 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:
CREATE INDEX user_id_idx
ON events (user_id);
A sintaxe completa é:
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.
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:
SELECT * FROM events
WHERE user_id = '019982fe-002a-7621-8c20-b332eeb71f44';
gerenciar índices
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:
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:
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:
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:
DROP INDEX user_id_idx;
Para evitar erros devido à falta de índices, utilize:
DROP INDEX IF EXISTS user_id_idx;
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).