LakeQL
Introduction
  • Overview
  • Why LakeQL
  • Key Concepts
Getting Started
  • Prerequisites
  • Quickstart
  • Environment
  • First Run
Architecture
  • System Overview
  • Data Flow
  • Request Lifecycle
Configuration
  • Config File
  • Runtime Lifecycle
  • Environment Variables
create-app
  • Usage
  • Template Structure
  • Post-Creation
Guides
  • Custom Resolvers
  • Extending the Schema
  • Mutations
  • Set Up a Trino Mutation
  • Deploying
Endpoints
  • Definition Format
  • Field Types
  • Nested Fields
  • Mutations
  • Glossary
Contributing
  • Local Development
  • Contribution Guide
  • Architecture
GitHub
LakeQL
  1. LakeQL
  2. Endpoints
  3. Mutations

On this page

  1. Where the data goes
  2. Load strategies
  3. Example

Mutations

The optional mutation block and its load strategies.

Add a mutation block to endpoint.json to make the endpoint writable. It's either false (explicitly disabled, same as omitting it) or a config object with a loadStrategy and a basePath.

NameType
loadStrategyRequiredLoadStrategy

Load strategy for the write pipeline.

basePathRequiredstring

Base path for endpoint data.

partitioning?PartitioningValue

Partitioning mode. true partitions by write timestamp, false disables partitioning, or a string for field-based/custom partitioning.

Default: true
partitioningFormat?string

Partition path granularity. One of "year", "year/month", or "year/month/day".

Default: "year/month/day"

loadStrategy accepts one of three values: full_load, full_load_append, or append. Load strategies below defines each one. basePath is required for every one of them, even those that don't use it (see the note below).

Where the data goes #

basePath, partitioning, and partitioningFormat describe where inside the configured object store this endpoint's data lands and how it is laid out. They do not configure the store itself. The bucket, region, and credentials come from the files-sdk instance on the data source's writeConfig, not from the endpoint. For example, with basePath: "sales/orders" and timestamp partitioning, an append write lands at sales/orders/all.parquet/year=2026/month=08/day=29/<uuid>.parquet in whatever bucket the data source is wired to.

See Writing data for how the storage write strategy is configured and Partitioning for the full path layout.

Load strategies #

Set loadStrategy to one of three values. Each one picks how a write combines with the data already in the table:

  • append — keep the existing data and add the new records.
  • full_load — replace the existing data with the new records.
  • full_load_append — replace the latest snapshot and keep an appended history alongside it.

These are the config-facing meanings. For the full runtime behavior of each value, see Load strategies. It covers ordering, atomicity, partial writes, retries, and failure modes.

basePath is required by the mutation schema regardless of which write strategy ends up handling the write. The basePath, partitioning, and partitioningFormat fields are only meaningful for the storage write strategy. full_load ignores partitioning, and the Trino adapter's INSERT INTO strategy ignores all three — it writes directly through SQL — but basePath must still be present for the definition to validate.

Example #

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21{
  "version": "1.0",
  "catalog": "hive",
  "schema": "sales",
  "tableName": "orders",
  "dataSource": "warehouse",
  "fields": [
    { "name": "id", "type": "Integer", "options": { "required": true } },
    {
      "name": "customerEmail",
      "type": "String",
      "options": { "required": true, "validations": [{ "type": "email" }] }
    },
    { "name": "status", "type": "String", "options": { "readOnly": true } }
  ],
  "mutation": {
    "loadStrategy": "append",
    "basePath": "sales/orders"
  }
}

Generating this definition with create-endpoint also writes a mutation-schema.ts file and registers a mutation field in the GraphQL schema, alongside the query field every endpoint gets. See the mutations guide for how that field is authorized and resolved at runtime, or Set Up a Trino Mutation for the end-to-end task.

Previous page

Nested Fields

Next page

Contributing

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21