mirror of
https://github.com/lancedb/lancedb.git
synced 2026-10-17 09:12:28 +00:00
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.
124 lines
4.5 KiB
Plaintext
124 lines
4.5 KiB
Plaintext
---
|
|
title: "Update rows"
|
|
sidebarTitle: "Update"
|
|
description: "Select existing rows, change values or expressions, and verify the changes."
|
|
icon: pen
|
|
availability:
|
|
oss: available
|
|
enterprise: available
|
|
summary: >-
|
|
Update rows through the SDKs in OSS and Enterprise. Enterprise also supports the SQL UPDATE statement.
|
|
---
|
|
|
|
import {
|
|
TsUpdateOperation,
|
|
TsUpdateUsingSql,
|
|
RsUpdateOperation,
|
|
RsUpdateUsingSql,
|
|
} from '/snippets/tables.mdx';
|
|
import {
|
|
PyUpdateOperation as UpdateOperation,
|
|
PyUpdateUsingSql as UpdateUsingSql,
|
|
} from '/snippets/ingestion_examples.mdx';
|
|
|
|
import { PyWriteWorkflow, TsWriteWorkflowBody, TsWriteWorkflowTail, RsWriteWorkflow } from '/snippets/ingestion_examples.mdx';
|
|
|
|
Use `update` to change rows selected by a predicate. Use
|
|
[merge insert](/ingestion/merge-insert) instead when matching an incoming dataset
|
|
against existing keys.
|
|
|
|
## Select the rows to change {#select-rows}
|
|
|
|
Check the predicate with a [filtered query](/search/filtering) before applying
|
|
the update. These examples target the row with `id = 2`. Review the scope
|
|
carefully when omitting a predicate, since that can update the entire table.
|
|
|
|
Each example below starts from Alice with 10 logins and Bob with 20. The
|
|
Python programs create and remove their own temporary database. TypeScript
|
|
and Rust operation blocks use `db`; a complete program is provided below.
|
|
|
|
## Assign a new value {#update-rows}
|
|
|
|
<CodeGroup>
|
|
<CodeBlock filename="Python" language="python" icon="python">
|
|
{UpdateOperation}
|
|
</CodeBlock>
|
|
<CodeBlock filename="TypeScript" language="typescript" icon="square-js">
|
|
{TsUpdateOperation}
|
|
</CodeBlock>
|
|
<CodeBlock filename="Rust" language="rust" icon="rust">
|
|
{RsUpdateOperation}
|
|
</CodeBlock>
|
|
</CodeGroup>
|
|
|
|
The result contains Alice and **Bobby**, with their login counts unchanged.
|
|
The Python `values` and TypeScript `values` arguments take literal values.
|
|
Rust's `column` argument is an expression, so the string value includes SQL quotes.
|
|
|
|
## Calculate a value from the existing row {#update-rows-with-sql-expressions}
|
|
|
|
<CodeGroup>
|
|
<CodeBlock filename="Python" language="python" icon="python">
|
|
{UpdateUsingSql}
|
|
</CodeBlock>
|
|
<CodeBlock filename="TypeScript" language="typescript" icon="square-js">
|
|
{TsUpdateUsingSql}
|
|
</CodeBlock>
|
|
<CodeBlock filename="Rust" language="rust" icon="rust">
|
|
{RsUpdateUsingSql}
|
|
</CodeBlock>
|
|
</CodeGroup>
|
|
|
|
In this separate example, Bob keeps his name and his login count becomes **21**.
|
|
Python's `values_sql` and TypeScript's `valuesSql` accept expressions.
|
|
These SDK expressions work with embedded OSS tables; they do not require an
|
|
Enterprise SQL endpoint. Enterprise also offers [`UPDATE`](/sql/dml/update).
|
|
|
|
## Verify the affected data {#verify}
|
|
|
|
Read the selected rows again and inspect the changed fields. For another
|
|
connection or table handle, account for its
|
|
[read consistency](/tables/consistency) settings.
|
|
|
|
Nested-field updates are not supported by these operations. For schema changes,
|
|
see [schema evolution](/management/table#schema). Treat derived values separately:
|
|
changing an input field is not a guarantee that every stored feature has been
|
|
recomputed. See [Refresh a column](/feature-engineering/refresh-column).
|
|
|
|
Updates can change index coverage and query cost. After a large update,
|
|
inspect the workload and follow [index maintenance](/indexing/reindexing)
|
|
guidance for the backend you use.
|
|
|
|
## 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>
|