Files
lancedb/docs/web/ingestion/delete.mdx
T
Brendan Clement 758f738b8c docs: complete ingestion, search and integration examples (#4533)
This PR is part of the documentation revamp. Once the full set of PRs is
merged, we’ll publish the combined site to staging for review before
updating docs.lancedb.com.

Ingestion, search and integration examples are incomplete or
inconsistent across languages, and some guidance misstates SDK behavior.

This brings the guides and their example sources together. It includes
complete Python, TypeScript and Rust workflows, isolated provider and
reranker examples, the Superlinked corrections, and guidance on retries
that can duplicate writes.

Stacked on #4491. Each MDX file has one PR owner. Rebase onto main after
#4491 is squash-merged.

Local assembly, Mint validation and link checks pass. Example code is
unchanged from the previously validated package. Publication stays held
through integration.
2026-10-15 14:54:08 -07:00

111 lines
4.5 KiB
Plaintext

---
title: "Delete rows"
sidebarTitle: "Delete"
description: "Select and delete records, verify the remaining rows, and understand storage retention."
icon: trash
availability:
oss: available
enterprise: available
summary: >-
Delete rows through the SDKs in OSS and Enterprise. Storage reclamation follows compaction and retention policy.
---
import { RsExample as RsDeleteRows } from '/snippets/ingestion_delete.mdx';
import { TsDeleteRowsBody, TsDeleteRowsTail } from '/snippets/ingestion_examples.mdx';
import { PyDeleteRows } from '/snippets/ingestion_examples.mdx';
import { PyWriteWorkflow, TsWriteWorkflowBody, TsWriteWorkflowTail, RsWriteWorkflow } from '/snippets/ingestion_examples.mdx';
Deleting rows removes matching records from the current table contents. It
keeps the table and schema so you can continue reading and writing. To remove
the table itself, see [Drop a table](/ingestion/create-table#drop-a-table).
## Inspect the rows you intend to delete {#select-rows}
Use the same predicate for inspection and deletion. The example below creates
Alice, Bob and Charlie, prints Charlie's row, and deletes it by `id = 3`.
Inspection and deletion are separate operations; concurrent writes can change
which rows match between them.
## Delete matching records {#delete-rows}
Each program creates Alice, Bob and Charlie in a temporary local database,
deletes Charlie, and prints the remaining rows: **Alice and Bob**. The temporary
database is removed when the program finishes.
- **Python:** install `lancedb`, save the code as `delete_rows.py`, and run
`python delete_rows.py`.
- **TypeScript:** install `@lancedb/lancedb`, save the code as `delete_rows.mts`,
and run `node delete_rows.mts` with Node.js 22.18 or later.
- **Rust:** download the [Rust examples](/static/code/ingestion-feedback-rust.zip),
extract the project, and run `cargo run --locked --bin delete`.
<CodeGroup>
<CodeBlock filename="Python" language="python" icon="python">
{PyDeleteRows}
</CodeBlock>
<CodeBlock filename="TypeScript" language="typescript" icon="square-js">
{TsDeleteRowsBody}
{TsDeleteRowsTail}
</CodeBlock>
<CodeBlock filename="Rust" language="rust" icon="rust">
{RsDeleteRows}
</CodeBlock>
</CodeGroup>
Enterprise also supports [`DELETE`](/sql/dml/delete).
## Verify that the rows are absent {#verify}
Query the same predicate after deletion and check the remaining row count.
A reader still using an older snapshot may see the earlier contents; see
[Consistency](/tables/consistency).
Deleted rows are excluded from current query results, including indexed
searches. Deletion does not imply immediate physical erasure of every stored
copy of the data.
## Understand storage reclamation {#storage}
Compaction rewrites the live data layout; cleanup removes eligible retained
versions and files. Retained history can continue to reference data that no
longer appears in the latest table version.
In OSS, `optimize()` provides maintenance operations. In Enterprise, managed
maintenance and retention follow the service configuration. Choose retention
according to the history you need, rather than shortening it as part of a
routine delete example. See [Compaction](/maintenance/compaction) and
[Cleanup](/maintenance/cleanup) for the separate maintenance workflow.
## Complete write workflow {#complete-example}
<Accordion title="Complete examples: create, append, update, upsert and delete">
Each program creates a temporary local database, performs the five operations,
prints the result, and removes its temporary data when finished.
- **Python:** install `lancedb`, save the code as `ingestion.py`, and run
`python ingestion.py`.
- **TypeScript:** install `@lancedb/lancedb`, save the code as `ingestion.mts`,
and run `node ingestion.mts` with Node.js 22.18 or later.
- **Rust:** download the [complete Rust project](/static/code/ingestion-rust.zip),
extract it, and run `cargo run --locked`. It includes `src/main.rs`, the Cargo
manifest and a lockfile for the example's dependencies. The code is shown below.
<CodeGroup>
<CodeBlock filename="ingestion.py" language="python" icon="python">
{PyWriteWorkflow}
</CodeBlock>
<CodeBlock filename="ingestion.mts" language="typescript" icon="square-js">
{TsWriteWorkflowBody}
{TsWriteWorkflowTail}
</CodeBlock>
<CodeBlock filename="src/main.rs" language="rust" icon="rust">
{RsWriteWorkflow}
</CodeBlock>
</CodeGroup>
After the operations, Alice has 10 logins, Bobby has 21, and Charlie has 6.
Dana is selected for deletion and is absent from the final result.
</Accordion>