Merge insert (upsert) records into a table
Performs a merge insert (upsert) operation on table id. This operation updates existing rows based on a matching column and inserts new rows that don't match. It returns the number of rows inserted and updated.
For tables that have been declared but not yet created on storage (is_only_declared=true), this operation will create the table with the provided data (since there are no existing rows to merge with).
REST NAMESPACE ONLY REST namespace uses Arrow IPC stream as the request body. It passes in the MergeInsertIntoTableRequest information in the following way:
- id: pass through path parameter of the same name
- on: pass through query parameter of the same name
- when_matched_update_all: pass through query parameter of the same name
- when_matched_update_all_filt: pass through query parameter of the same name
- when_not_matched_insert_all: pass through query parameter of the same name
- when_not_matched_by_source_delete: pass through query parameter of the same name
- when_not_matched_by_source_delete_filt: pass through query parameter of the same name
Path parameters
string identifier of an object in a namespace, following the Lance Namespace spec. When the value is equal to the delimiter, it represents the root namespace. For example, v1/namespace/$/list performs a ListNamespace on the root namespace.
Query parameters
An optional delimiter of the string identifier, following the Lance Namespace spec. When not specified, the $ delimiter must be used.
Optional branch to target. When not specified, the main branch is used. Used by branch-scoped operations that cannot carry a branch field in their request body (Arrow IPC stream and bodyless operations). Operations with a JSON request body carry branch as a body field instead.
Lance field path to use for matching rows. Nested fields use dot-separated segments; use backtick-quoted segments for literal dots and double backticks inside quoted segments. Use canonical full paths for display and errors; leaf names alone only identify top-level fields; invalid or unresolved paths should return InvalidInput or TableColumnNotFound.
Update all columns when rows match
The row is updated (similar to UpdateAll) only for rows where the SQL expression evaluates to true. Field references must use Lance field path syntax: nested fields use dot-separated segments, literal dots require backtick-quoted segments, and backticks inside quoted segments are doubled.
Insert all columns when rows don't match
Delete all rows from target table that don't match a row in the source table
Delete rows from the target table if there is no match AND the SQL expression evaluates to true. Field references must use Lance field path syntax: nested fields use dot-separated segments, literal dots require backtick-quoted segments, and backticks inside quoted segments are doubled.
Timeout for the operation (e.g., "30s", "5m")
Whether to use index for matching rows
Response
Result of merge insert operation
Example response
{
"transaction_id": "transaction_id",
"num_inserted_rows": 0,
"num_updated_rows": 0,
"context": {
"key": "context"
},
"num_deleted_rows": 0,
"version": 0
}