lakebase_vector

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)listsdefault_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 빈 값 listsdefault_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 비벡터 필터를 평가한 후 완전 정밀도 거리 재랭킹을 수행합니다. 유효한 값은 onoff입니다. 대부분의 후보 행을 제거하는 저렴한 필터에 가장 좋습니다.

유틸리티 함수

Function Returns Description
lakebase_ann_prewarm(regclass) 무효 처리하다 첫 번째 쿼리에서 콜드 시작 대기 시간을 제거하기 위해 인덱스를 메모리에 로드합니다.
lakebase_ann_index_info(regclass) text 인덱스 메타데이터를 텍스트(예 lists: , default_probesdefault_epsilon)로 반환합니다.

다음 단계