Important
이 기능은 베타 버전으로 제공됩니다. 작업 영역 관리자는 미리 보기 페이지에서 이 기능에 대한 액세스를 제어할 수 있습니다. Azure Databricks 미리 보기 관리를 참조하세요.
확장은 lakebase_vector 인덱스 형식을 통해 Lakebase에 근사한 인접 항목(ANN) 벡터 검색을 lakebase_ann 추가합니다. 동일한 벡터 형식, 거리 연산 자 및 쿼리 구문은 수정 없이 작동합니다.
Install
먼저 프로젝트 설정에서 Lakebase 검색을 사용하도록 설정합니다 . 그런 다음, 확장을 설치합니다.
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;
키워드는 CASCADE 자동으로 종속성으로 설치됩니다 pgvector .
빠른 시작
-- 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;
동기화된 테이블에서 채워짐
Unity 카탈로그에서 임베딩을 직접 삽입하지 않고 불러온다면, 동기화된 테이블은 동기화 JSONB 시 lakehouse 임베딩 컬럼을 기본 매핑 대신 Postgres vector 컬럼으로 바로 매핑할 수 있습니다.
Lakebase Search의 사용자 지정 유형 매핑을 참조하세요.
인덱스 구성
인덱스 생성 시 정확도/속도 절충을 제어하도록 설정합니다 build_mode .
-
standard(기본값): 리콜과 인덱스 빌드 시간을 균형 맞추는 것. 대부분의 워크로드에 사용합니다. -
quality: 회상력을 향상시키지만 쌓는 데 시간이 더 걸립니다.
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (build_mode = 'quality');
빌드 모드는 fast 하위 호환성을 위해 계속 지원됩니다.
기본적으로 lakebase_ann 표의 통계와 인덱스 구성을 기반으로 리스트를 선택합니다. 파티션 레이아웃을 명시적으로 제어하도록 설정 lists :
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (lists = '1000');
동시에 인덱스 빌드
테이블을 잠그지 않고 빌드한 다음 CREATE INDEX CONCURRENTLY 가동 중지 시간 없이 다시 빌드하는 데 사용합니다REINDEX CONCURRENTLY.
CREATE INDEX CONCURRENTLY items_embedding_ann ON items
USING lakebase_ann (embedding vector_l2_ops);
REINDEX INDEX CONCURRENTLY items_embedding_ann;
검색 정확도 조정
튜닝하기 전에 인덱스 lakebase_ann_index_info(index_name)lists및 default_probes 값을 가져오기 위해 호출 default_epsilon 합니다.
쿼리 시점에 IVF 파티션 수를 제어하기 위해 사용 lakebase_ann.probes 하세요. 값이 높을수록 쿼리 속도의 비용으로 회수가 향상됩니다. 기본값은 'auto'입니다. 회상 목표를 달성하기 위해 다양한 값을 테스트해 보세요.
의 probes 형태는 의 형태 lists와 일치해야 한다. 배열을 찾 lists 기 위해 호출 lakebase_ann_index_info 한 후, 1레벨 인덱스에는 하나의 값을, 2레벨 인덱스에는 쉼표로 구분된 두 값을 설정하세요:
lists 인덱스 정보에서 |
probes 설정하려면 |
|---|---|
[] (비어 있음) |
'' |
[222] |
'22' |
[3333, 33333] |
'33, 333' |
메모
작은 데이터셋 lakebase_ann 에서는 IVF 분할 대신 정확(평면) 검색을 사용하며, lakebase_ann_index_info 빈 값 lists 과 default_probes를 반환합니다. 이 경우, 로 설정''한 대로 남겨 probes 두세요. 가 비어 있지 않으면lists, 형태가 일치 lists 하지 않는 값이 probes 오류를 일으킵니다.
-- 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 전정밀 거리를 사용하여 몇 명의 후보가 재순위를 매기는지 제어합니다. 값이 높을수록 더 많은 후보가 재순위를 차지하고 시간이 더 오래 걸립니다. 기본값은 'auto' 대부분의 워크로드에 적합합니다. 작은 데이터셋에서 평면 검색을 할 때도 epsilon 여전히 전정밀도 재랭킹을 제어합니다.
프리필터
기본적으로 Postgres는 ANN 인덱스가 후보 행을 반환한 후 비벡터 필터 조건을 적용합니다. 전정밀도 거리 재순위 전에 해당 조건들을 평가할 수 있게 합니다 lakebase_ann.prefilter :
SET lakebase_ann.prefilter TO on;
SELECT * FROM items
WHERE id % 100 = 0
ORDER BY embedding <-> '[3,1,2]'
LIMIT 10;
사전 필터링은 필터가 평가 비용이 저렴하고 대부분의 행을 제거할 때 가장 효과적입니다. 여러 행이 일치하거나 비용이 많이 드는 계산이 필요한 필터는 제외하세요. 인덱스 내 필터를 평가하면 오버헤드가 생길 수 있습니다.
연산자 클래스
| 거리 메트릭 | 연산자 클래스 | 쿼리 연산자 |
|---|---|---|
| L2(유클리드) | vector_l2_ops |
<-> |
| 음의 내적 | vector_ip_ops |
<#> |
| 코사인 유사성 | vector_cosine_ops |
<=> |
포함이 학습된 방법과 일치하는 연산자 클래스를 선택하고 인덱스 및 쿼리에 대해 동일한 메트릭을 사용합니다.
-
vector_cosine_ops(<=>)는 코사인 유사성입니다. 대부분의 텍스트 포함에 사용합니다. 이것이 가장 일반적인 선택입니다. -
vector_l2_ops(<->)는 유클리드(L2) 거리입니다. 절대 공간 거리가 중요하고 벡터가 정규화되지 않은 경우 사용합니다. -
vector_ip_ops(<#>)는 음수 내부 제품입니다. 벡터가 단위 길이로 미리 정규화될 때 사용합니다. 단위 벡터의 경우 내부 제품은 코사인 유사성과 같으며 일반적으로 더 빠릅니다.
인덱스 옵션 참조
| Option | 유형 | Default | Description |
|---|---|---|---|
build_mode |
string | 'standard' |
정확도와 속도의 균형을 조절합니다. 더 긴 인덱스 빌드를 위해 더 좋은 기억력을 위해 사용하는 'quality' 것.
'fast' 하위 호환성을 위해 계속 지원됩니다. |
lists |
string | 'auto' |
IVF 파티션 레이아웃을 설정합니다.
'auto'확장은 테이블의 통계량과 인덱스 구성을 바탕으로 값을 선택합니다. 1레벨 인덱스와 같이 '1000' 단일 정수를 설정하거나, 2레벨 인덱스의 경우 쉼표로 구분된 두 개의 오름차순 정수를 '100, 1000' 설정하세요. |
GUC 참조
| 매개 변수 | 유형 | Default | Description |
|---|---|---|---|
lakebase_ann.probes |
string | 'auto' |
각 레벨에서 스캔할 IVF 파티션의 수. 값이 높을수록 쿼리 속도의 비용으로 회수가 향상됩니다. 도형은 의 lakebase_ann_index_info배열과 lists 일치해야 합니다. |
lakebase_ann.epsilon |
string | 'auto' |
전정밀 거리를 사용하여 몇 명의 후보자가 재순위를 매길지 제어합니다. 값이 높을수록 더 많은 후보가 재순위를 차지하고 시간이 더 오래 걸립니다. |
lakebase_ann.prefilter |
열거형 | off |
비벡터 필터를 평가한 후 완전 정밀도 거리 재랭킹을 수행합니다. 유효한 값은 on 및 off입니다. 대부분의 후보 행을 제거하는 저렴한 필터에 가장 좋습니다. |
유틸리티 함수
| Function | Returns | Description |
|---|---|---|
lakebase_ann_prewarm(regclass) |
무효 처리하다 | 첫 번째 쿼리에서 콜드 시작 대기 시간을 제거하기 위해 인덱스를 메모리에 로드합니다. |
lakebase_ann_index_info(regclass) |
text | 인덱스 메타데이터를 텍스트(예 lists: , default_probes및 default_epsilon)로 반환합니다. |