Files
lancedb/docs/web/ingestion/delete.mdx
T
Jack Ye ddb318567a docs: complete SQL reference, enrich Functions drafts, rename OSS to Embedded (#4732)
## Summary

- Complete the SQL reference: `ATTACH DATABASE`, the `CHANGES` clause,
and
`dedupe()`/`duplicate_pairs()` (verified against current sophon source;
these were recently renamed from
`vector_dedup`/`vector_duplicate_pairs`).
  Fix the blob-column default-projection claim and add the previously
  undocumented `blob_descriptor()`.
- Enrich the gated Functions draft (still `.mintignore`'d, pre-release):
  chained Functions over blob outputs, GPU-produced blobs, Secrets,
  multi-input/output binding, `code=[module]` packaging.
- Upgrade the materialized-view and computed-column auto-refresh drafts
with
  precise, verified catch-up semantics, and add the missing `ALTER
  MATERIALIZED VIEW` / `CREATE ... WITH(...)` sections (also gated — the
  automatic-refresh scheduler is still dev/staging-only).
- Thread one running example (video frames → GPU extract/caption → dedup
→
auto-refreshing materialized view) through Functions, materialized
views,
and the LeRobotDataset integration guide instead of a separate tutorial.
- Rename "LanceDB OSS"/"OSS" to "LanceDB Embedded"/"Embedded" throughout
  (52 files); activate the existing availability-comparison mechanism on
  `basics/offerings.mdx` for a full feature-by-feature comparison table.
2026-10-29 10:16:03 -07:00

109 lines
4.3 KiB
Plaintext

---
title: "Delete rows"
sidebarTitle: "Delete"
description: "Select and delete records, verify the remaining rows, and understand storage retention."
icon: trash
availability:
embedded: available
enterprise: available
---
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 LanceDB Embedded, `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>