Pular para o conteúdo principal

lakebase_vector

info

Beta

Este recurso está em Beta. Os administradores do espaço de trabalho podem controlar o acesso a esse recurso na página Pré-visualizações . Consulte Gerenciar prévias do Databricks.

A extensão lakebase_vector adiciona busca vetorial de vizinhos mais próximos aproximados (ANN) ao Lakebase através do tipo de índice lakebase_ann. É um complemento direto para pgvector: os mesmos tipos de vetor, operadores de distância e sintaxe de consulta funcionam sem modificação.

Instalar

Primeiro, habilite a Pesquisa Lakebase nas configurações do seu projeto. Em seguida, instale a extensão:

SQL
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;

A palavra-chave CASCADE instala automaticamente pgvector como uma dependência.

Início rápido

SQL
-- Create a table with a vector column
CREATE TABLE items (id BIGSERIAL PRIMARY KEY, embedding VECTOR(3));

-- Insert sample data
INSERT INTO items (embedding)
SELECT ARRAY[random(), random(), random()]::real[]
FROM generate_series(1, 1000);

-- Create a lakebase_ann index
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops);

-- Query using standard pgvector distance operators
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

Se você estiver carregando incorporações do Unity Catalog em vez de inseri-las diretamente, tabelas sincronizadas podem mapear uma coluna de incorporação de lakehouse diretamente para uma coluna Postgres vector durante a sincronização, em vez do mapeamento default JSONB. Consulte Mapeamento de tipo personalizado para a Lakebase Search.

Configure o índice

Defina build_mode na criação do índice para controlar a relação entre precisão e velocidade:

  • standard (default): equilibra o recall e o tempo de construção do índice. Use para a maioria das cargas de trabalho.
  • quality: melhora o recall, mas demora mais para construir.
SQL
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (build_mode = 'quality');

O modo de compilação fast permanece suportado para compatibilidade com versões anteriores.

Por default, lakebase_ann escolhe listas com base nas estatísticas da tabela e na configuração do índice. Defina lists para controlar a disposição de partição explicitamente:

SQL
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (lists = '1000');

Crie índices simultaneamente

Use CREATE INDEX CONCURRENTLY para construir sem bloquear a tabela e, em seguida, REINDEX CONCURRENTLY para reconstruir sem tempo de inatividade:

SQL
CREATE INDEX CONCURRENTLY items_embedding_ann ON items
USING lakebase_ann (embedding vector_l2_ops);

REINDEX INDEX CONCURRENTLY items_embedding_ann;

Ajuste a precisão da pesquisa

Antes de ajustar, chame lakebase_ann_index_info(index_name) para obter os valores de lists, default_probes e default_epsilon do índice.

Use lakebase_ann.probes no momento da query para controlar quantas partições IVF são pesquisadas. Valores mais altos melhoram o recall ao custo da velocidade da query. O default é 'auto'. Teste valores diferentes para atingir sua meta de recall.

A forma de probes deve corresponder à forma de lists. Chame lakebase_ann_index_info para encontrar seu array lists, então defina um valor para um índice de um nível ou dois valores separados por vírgulas para um índice de dois níveis:

lists de informações de índice

probes para definir

[] (vazio)

''

[222]

'22'

[3333, 33333]

'33, 333'

lists de informações de índice

probes para definir

[] (vazio)

''

[222]

'22'

[3333, 33333]

'33, 333'

nota

Em um dataset pequeno, lakebase_ann usa pesquisa exata (plana) em vez de particionamento IVF, e lakebase_ann_index_info retorna lists e default_probes vazios. Nesse caso, mantenha probes definido como ''. Quando lists não estiver vazio, um valor probes cuja forma não corresponda a lists causará um erro.

SQL
-- Check your index's lists array first
SELECT lakebase_ann_index_info('items_embedding_ann');

-- Then set probes to match the shape of lists.
-- One-level index (single-value lists): set one value.
SET lakebase_ann.probes TO '10';

-- Two-level index: set two ascending comma-separated values, for example '10, 20'.
-- Flat index (empty lists): leave probes set to ''.

SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 10;

lakebase_ann.epsilon controla quantos candidatos são reclassificados usando distâncias de precisão total. Valores mais altos reclassificam mais candidatos e demoram mais. O valor default de 'auto' funciona bem para a maioria das cargas de trabalho. Durante a busca plana em um dataset pequeno, epsilon ainda controla a reclassificação de precisão total.

Pré-filtro

Por default, o Postgres aplica condições de filtro não vetoriais após o índice de rede neurais artificiais (ANN) retornar as linhas candidatas. Habilite lakebase_ann.prefilter para avaliar essas condições antes da reclassificação de distância de precisão total:

SQL
SET lakebase_ann.prefilter TO on;

SELECT * FROM items
WHERE id % 100 = 0
ORDER BY embedding <-> '[3,1,2]'
LIMIT 10;

A pré-filtragem funciona melhor quando o filtro é barato de avaliar e remove a maioria das linhas. Deixe-o desativado para filtros que correspondem a muitas linhas ou exigem cálculos caros, já que avaliar o filtro dentro do índice pode adicionar sobrecarga.

Classes de operador

Métrica de distância

Classe de operador

Operador de consulta

L2 (Euclidiano)

vector_l2_ops

<->

Produto interno negativo

vector_ip_ops

<#>

Semelhança de cosseno

vector_cosine_ops

<=>

Métrica de distância

Classe de operador

Operador de consulta

L2 (Euclidiano)

vector_l2_ops

<->

Produto interno negativo

vector_ip_ops

<#>

Semelhança de cosseno

vector_cosine_ops

<=>

Escolha a classe de operador que corresponda a como suas incorporações foram treinadas e utilize a mesma métrica para o índice e a consulta:

  • vector_cosine_ops (<=>) é similaridade de cosseno. Utilize-o para a maioria das incorporações de texto. Esta é a escolha mais comum.
  • vector_l2_ops (<->) é a distância euclidiana (L2). Utilize-o quando a distância espacial absoluta for importante e os vetores não forem normalizados.
  • vector_ip_ops (<#>) é produto interno negativo. Utilize-o quando os vetores forem pré-normalizados para comprimento unitário. Para vetores unitários, o produto interno é igual à similaridade de cosseno e é tipicamente mais rápido.

Referência de opções de índice

Opção

Tipo

Padrão

Descrição

build_mode

string

'standard'

Controla o equilíbrio entre precisão e velocidade. Use 'quality' para obter melhor recall ao custo de uma construção de índice mais longa. 'fast' permanece suportado para compatibilidade com versões anteriores.

lists

string

'auto'

Define a disposição de partição IVF. Com 'auto', a extensão escolhe um valor com base nas estatísticas da tabela e na configuração do índice. Defina um único número inteiro, como '1000', para um índice de um nível, ou dois números inteiros crescentes separados por vírgulas, como '100, 1000', para um índice de dois níveis.

Opção

Tipo

Padrão

Descrição

build_mode

string

'standard'

Controla o equilíbrio entre precisão e velocidade. Use 'quality' para obter melhor recall ao custo de uma construção de índice mais longa. 'fast' permanece suportado para compatibilidade com versões anteriores.

lists

string

'auto'

Define a disposição de partição IVF. Com 'auto', a extensão escolhe um valor com base nas estatísticas da tabela e na configuração do índice. Defina um único número inteiro, como '1000', para um índice de um nível, ou dois números inteiros crescentes separados por vírgulas, como '100, 1000', para um índice de dois níveis.

Referência GUC

Parâmetro

Tipo

Padrão

Descrição

lakebase_ann.probes

string

'auto'

Número de partições IVF a serem verificadas em cada nível. Valores mais altos melhoram o recall ao custo da velocidade da query. A forma deve corresponder ao array lists de lakebase_ann_index_info.

lakebase_ann.epsilon

string

'auto'

Controla quantos candidatos são reclassificados usando distâncias de precisão total. Valores mais altos reclassificam mais candidatos e levam mais tempo.

lakebase_ann.prefilter

enumeração

off

Avalia filtros não vetoriais antes da reclassificação de distância de precisão total. Os valores válidos são on e off. Ideal para filtros de baixo custo que removem a maioria das linhas candidatas.

Parâmetro

Tipo

Padrão

Descrição

lakebase_ann.probes

string

'auto'

Número de partições IVF a serem verificadas em cada nível. Valores mais altos melhoram o recall ao custo da velocidade da query. A forma deve corresponder ao array lists de lakebase_ann_index_info.

lakebase_ann.epsilon

string

'auto'

Controla quantos candidatos são reclassificados usando distâncias de precisão total. Valores mais altos reclassificam mais candidatos e levam mais tempo.

lakebase_ann.prefilter

enumeração

off

Avalia filtros não vetoriais antes da reclassificação de distância de precisão total. Os valores válidos são on e off. Ideal para filtros de baixo custo que removem a maioria das linhas candidatas.

Funções de utilidade

Função

Devolve

Descrição

lakebase_ann_prewarm(regclass)

vazio

Carrega um índice na memória para eliminar a latência de inicialização a frio na primeira consulta.

lakebase_ann_index_info(regclass)

TEXT

Retorna metadados de índice como texto, incluindo lists, default_probes e default_epsilon.

Função

Devolve

Descrição

lakebase_ann_prewarm(regclass)

vazio

Carrega um índice na memória para eliminar a latência de inicialização a frio na primeira consulta.

lakebase_ann_index_info(regclass)

TEXT

Retorna metadados de índice como texto, incluindo lists, default_probes e default_epsilon.

Passos seguintes