lakebase_vector
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:
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;
A palavra-chave CASCADE instala automaticamente pgvector como uma dependência.
Início rápido
-- 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;
Popular a partir de tabelas sincronizadas
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.
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:
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:
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:
|
|
|---|---|
|
|
|
|
|
|
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.
-- 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:
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) |
|
|
Produto interno negativo |
|
|
Semelhança de cosseno |
|
|
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 |
|---|---|---|---|
| string |
| Controla o equilíbrio entre precisão e velocidade. Use |
| string |
| Define a disposição de partição IVF. Com |
Referência GUC
Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
| string |
| 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 |
| string |
| Controla quantos candidatos são reclassificados usando distâncias de precisão total. Valores mais altos reclassificam mais candidatos e levam mais tempo. |
| enumeração |
| Avalia filtros não vetoriais antes da reclassificação de distância de precisão total. Os valores válidos são |
Funções de utilidade
Função | Devolve | Descrição |
|---|---|---|
| vazio | Carrega um índice na memória para eliminar a latência de inicialização a frio na primeira consulta. |
| TEXT | Retorna metadados de índice como texto, incluindo |