> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lancedb.com/llms.txt
> Use this file to discover all available pages before exploring further.

# IVF_PARTITION

> The ivf_partition() scalar function: assign each row to its trained IVF index partition.

**Applies to:** Embedded ❌, Enterprise ✅

```sql SQL icon="database" theme={"theme":{"light":"vitesse-light","dark":"catppuccin-mocha"}}
SELECT
    ivf_partition(embedding, selection => 'random', count => 100, seed => 42) AS partition,
    array_agg(id) AS ids
FROM documents
GROUP BY partition
```

`ivf_partition` reads an existing IVF-family vector index's trained
partitions and assigns each row to the one its vector falls into. The column
needs an up-to-date, single-segment index before the function runs -- the
same requirement [`dedupe`](https://docs.lancedb.com/curation/dedupe#example-data) has.

Grouping by its result buckets rows by vector proximity without a full
pairwise scan -- useful for blocking a large table into comparable chunks,
such as before a pairwise similarity pass.

## Input

`ivf_partition` takes exactly 1, 3, or 4 arguments -- the vector column
alone (scans every partition), or the vector column plus `selection` and
`count`, plus `seed` only when `selection` is `'random'`:

| Argument | Type | Required | Meaning |
| - | - | - | - |
| vector column | column reference | yes | the indexed vector column to assign |
| `selection` | `'first'` \| `'random'` | required with `count` | which partitions to sample -- there is no explicit `'all'`; omit `selection` and `count` entirely to scan every partition |
| `count` | int, > 0 | required with `selection` | number of partitions to sample |
| `seed` | int, >= 0 | required for `'random'`, refused for `'first'` | random seed |

Arguments can be passed positionally, `ivf_partition(embedding, 'random', 100, 42)`,
or named as shown above. `count` and `seed` are the same scan-scoping
arguments [`duplicate_pairs`](https://docs.lancedb.com/sql/dql/duplicate-pairs#sampling) accepts,
so a sampled partition estimate carries over -- but not `dedupe`, which
always scans every partition and refuses sampling arguments entirely.

## What to read next

> [card] [Cluster records by index partition](https://docs.lancedb.com/curation/clustering.md)
>
> Use this function to group and sample records by an existing index's partitions.

> [card] [DEDUPE](https://docs.lancedb.com/sql/dql/dedupe.md)
>
> The packaged table function for the deduplication use case, over the same index.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.