VECTOR_SEARCH 쿼리
VECTOR_SEARCH 쿼리 (Vector Search)
Flink SQL은 SQL 쿼리에서 벡터 검색을 수행하는 VECTOR_SEARCH 테이블-값 함수(TVF)를 제공해요. 이 함수로 고차원 벡터에 따라 유사한 행을 검색할 수 있어요.
출처: Vector Search
본문
{{< label Batch >}} {{< label Streaming >}}
VECTOR_SEARCH Function
VECTOR_SEARCH는 processing-time 속성을 사용해 외부 테이블의 최신 버전 데이터와 행을 연결해요. Flink SQL의 lookup join과 매우 유사하지만, 차이는 VECTOR_SEARCH가 입력 데이터 벡터를 사용해 외부 테이블의 데이터와 유사도를 비교하고 top-k개의 가장 유사한 행을 반환한다는 점이에요.
Syntax
SELECT *
FROM input_table, LATERAL TABLE(VECTOR_SEARCH(
TABLE vector_table,
input_table.vector_column,
DESCRIPTOR(index_column),
top_k,
[CONFIG => MAP['key', 'value']]
))
Parameters
input_table: 처리할 데이터를 포함하는 입력 테이블vector_table: 벡터로 검색할 수 있는 외부 테이블의 이름vector_column: 입력 테이블의 컬럼 이름, 타입은 FLOAT ARRAY 또는 DOUBLE ARRAY여야 해요index_column: 벡터 테이블의 어떤 컬럼을 입력 데이터와 유사도 비교에 사용할지 지정하는 descriptortop_k: 반환할 가장 유사한 행의 top-k 개수config: (선택) 벡터 검색을 위한 구성 옵션 맵
Configuration Options
config 맵에서 다음 구성 옵션을 지정할 수 있어요:
async: 벡터 검색을 비동기로 수행할지 여부
timeout: 비동기 검색의 타임아웃
Example
-- Basic usage
SELECT * FROM
input_table, LATERAL TABLE(VECTOR_SEARCH(
TABLE vector_table,
input_table.vector_column,
DESCRIPTOR(index_column),
10
));
-- With configuration options
SELECT * FROM
input_table, LATERAL TABLE(VECTOR_SEARCH(
TABLE vector_table,
input_table.vector_column,
DESCRIPTOR(index_column),
10,
MAP['async', 'true', 'timeout', '100s']
));
-- Using named parameters
SELECT * FROM
input_table, LATERAL TABLE(VECTOR_SEARCH(
SEARCH_TABLE => TABLE vector_table,
COLUMN_TO_QUERY => input_table.vector_column,
COLUMN_TO_SEARCH => DESCRIPTOR(index_column),
TOP_K => 10,
CONFIG => MAP['async', 'true', 'timeout', '100s']
));
-- Searching with contant value
SELECT *
FROM TABLE(VECTOR_SEARCH(
TABLE vector_table,
ARRAY[10, 20],
DESCRIPTOR(index_column),
10,
));
Output
출력 테이블은 입력 테이블의 모든 컬럼, 벡터 검색 테이블의 컬럼, 그리고 입력 행과 매칭 행 사이의 유사도를 나타내는 score라는 컬럼을 포함해요.
Notes
- 벡터 테이블의 구현은
org.apache.flink.table.connector.source.VectorSearchTableSource인터페이스를 구현해야 해요. 자세한 내용은 Vector Search Table Source를 참고하세요. VECTOR_SEARCH는 append-only 테이블만 소비할 수 있어요.- 함수 호출이 다른 테이블과 상관관계가 없으면
VECTOR_SEARCH는LATERAL키워드를 요구하지 않아요. 예를 들어 검색 컬럼이 상수·리터럴 값이면LATERAL을 생략할 수 있어요.