Skip to main content

Brute-force kNN

SQL function: cuvs_brute_force_knn

Exact brute-force nearest-neighbor search over dense vectors.

Signature

cuvs_brute_force_knn((dataset relation subquery), (queries relation subquery), options_json)

Quickstart

The call below expects the registered relations dataset_vectors (the dataset role) and queries_vectors (the queries role), each passed as a parenthesized SELECT subquery. Substitute your own relations and column names.

SELECT *
FROM cuvs_brute_force_knn(
(SELECT item_id, d0, d1 FROM dataset_vectors),
(SELECT query_id, d0, d1 FROM query_vectors),
'{"dataset":{"id":"item_id","vector":{"columns":["d0","d1"]}},"queries":{"id":"query_id","vector":{"columns":["d0","d1"]}},"k":8,"metric":"l2_expanded"}'
);

Inputs

Each relation argument is a parenthesized SELECT subquery that the planner keeps as a real child; metadata validation resolves a registered table or view for the same role instead. See Vector Inputs for the relation identity rules and the ID, dense-vector type, null, finite-value, and runtime-dimension contract.

RoleRequiredValidation referenceDescription
datasetyestableDense-vector rows searched by the exact kNN operation.
queriesyestableDense-vector query rows matched against the evaluated dataset.

Arguments and options

Scalar SQL arguments

ArgumentTypeRequiredDescription
options_jsonJSON string literalyescuVS operation options and relation-column bindings

JSON options

OptionRequiredJSON shapeDefaultConstraintsDescription
datasetyesobjectNames the dataset ID column and one dense-vector binding shape.
kyesintegerminimum 1; maximum 4294967295Number of neighbors returned for each evaluated query row.
metricyesstringone of "l2_expanded", "l2_sqrt_expanded", "cosine", "inner_product"Distance or score metric. Distance metrics rank lower values first; inner product ranks higher values first.
queriesyesobjectNames the query ID column and one dense-vector binding shape.

Vector binding shapes

id: Non-null logical row ID column. IDs may repeat; result ordinals disambiguate physical rows.

ShapeJSONContract
Wide Float32 columns{"vector":{"columns":["d0","d1"]}}Ordered, unique non-null Float32 feature columns; order defines vector dimensions.
List column{"vector":{"column":"embedding"}}One non-null FixedSizeList<Float32, D>, List<Float32>, or LargeList<Float32> column.

Choose exactly one dense-vector binding shape.

Output

ColumnTypeNullableDescription
query_ordinalUInt64noZero-based ordinal of the evaluated query row; it disambiguates duplicate query IDs.
query_idsame_as_queries.idnoLogical ID copied from the queries relation.
neighbor_ordinalUInt64noZero-based ordinal of the matched dataset row; it disambiguates duplicate dataset IDs.
neighbor_idsame_as_dataset.idnoLogical ID copied from the matched dataset row.
rankUInt32noOne-based neighbor rank within a query. Order consumers explicitly by query_ordinal, rank.
distanceFloat32noMetric value; smaller is better for distance metrics, while inner_product prefers larger values.

Concrete schemas are call-specific. Run gpu_validate_call against registered relations to inspect the output schema after the actual ID types and literal options are validated.

Limits

  • Validation resolves named tables or views and reads schemas only; it does not execute relation scans or GPU work.
  • Execution relation arguments require parenthesized subqueries; dry-run validation accepts registered named relations only.
  • Builds an exact query-local index over the evaluated dataset relation; it does not persist an ANN index or replace a vector database.
  • The evaluated dataset must be non-empty and k must not exceed its row count. An empty query relation may return an empty result with the stable schema.
  • Dataset and query vector dimensions must match after both relation children are evaluated.

Validate the call

Validation checks registered relation metadata, bindings, dtypes, and options without scanning rows or touching the GPU:

SELECT * FROM gpu_validate_call(
'cuvs_brute_force_knn',
'{"schema_version":1,"relations":{"dataset":{"table":"dataset_vectors"},"queries":{"table":"queries_vectors"}},"options":{"dataset":{"id":"item_id","vector":{"columns":["d0","d1"]}},"queries":{"id":"query_id","vector":{"columns":["d0","d1"]}},"k":8,"metric":"l2_expanded"}}'
);

See GPU Function Catalog API for the full gpu_validate_call contract.