Skip to content

DuckLake

Experimental

This functionality is experimental.

DuckLake is a modern LakeHouse which uses a relational database as its metadata backend.

Currently, there is only one production-ready implementation of DuckLake - via DuckDB, and the built-in DuckDBMetadataStore can be configured to use DuckLake as its storage backend. Learn more about the DuckDB integration here.

Configuration

There are two main parts that configure DuckLake: a metadata backend (where the transaction log and the catalog is stored) and a storage backend (where the data files (1) live).

  1. Parquet files

Each storage backend that manages secrets (PostgreSQL, S3, R2, GCS) requires a secret_name. Metaxy uses this name to either create a new DuckDB secret (when inline credentials are provided) or reference a pre-existing one (when only the name is given).

Tip

To use the credential chain (IAM roles, environment variables, etc.) instead of static credentials, set secret_parameters = { provider = "credential_chain" } on S3, R2, or GCS storage backends.

Example Configuration

[stores.dev]
type = "metaxy.ext.metadata_stores.duckdb.DuckDBMetadataStore"

[stores.dev.config.ducklake.metadata_backend]
type = "postgres"
secret_name = "my_pg_secret"
host = "localhost"
port = 5432
database = "ducklake_meta"
user = "ducklake"
password = "changeme"

[stores.dev.config.ducklake.storage_backend]
type = "s3"
secret_name = "my_s3_secret"
bucket = "my-ducklake-bucket"
key_id = "AKIA..."
secret = "..."
region = "eu-central-1"

See the DuckLake example to learn more.

MotherDuck Bring Your Own Bucket (BYOB)

MotherDuck can manage the DuckLake catalog while you provide your own S3-compatible storage. In this mode Metaxy creates the DuckLake database with a custom DATA_PATH and the storage secret is created IN MOTHERDUCK so that MotherDuck compute can access your bucket.

MotherDuck BYOB Configuration

[stores.dev.config.ducklake.metadata_backend]
type = "motherduck"
database = "my_ducklake"
region = "eu-central-1"

[stores.dev.config.ducklake.storage_backend]
type = "s3"
secret_name = "my_s3_secret"
key_id = "AKIA..."
secret = "..."
region = "eu-central-1"
scope = "s3://mybucket/"
bucket = "mybucket"

Without a storage_backend, MotherDuck uses its own fully managed storage and no additional configuration is needed.

DuckLake attachment configuration for a DuckDB connection.

Show JSON schema:
{
  "$defs": {
    "DuckDBMetadataBackendConfig": {
      "description": "DuckDB file-based metadata backend for [DuckLake](https://ducklake.select/).",
      "properties": {
        "type": {
          "const": "duckdb",
          "default": "duckdb",
          "title": "Type",
          "type": "string"
        },
        "uri": {
          "title": "Uri",
          "type": "string"
        }
      },
      "required": [
        "uri"
      ],
      "title": "DuckDBMetadataBackendConfig",
      "type": "object"
    },
    "GCSStorageBackendConfig": {
      "description": "Google Cloud Storage backend for [DuckLake](https://ducklake.select/).\n\nUses the DuckDB ``TYPE GCS`` secret with HMAC authentication.",
      "properties": {
        "type": {
          "const": "gcs",
          "default": "gcs",
          "title": "Type",
          "type": "string"
        },
        "key_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Key Id"
        },
        "secret": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Secret"
        },
        "data_path": {
          "title": "Data Path",
          "type": "string"
        },
        "secret_name": {
          "title": "Secret Name",
          "type": "string"
        },
        "secret_parameters": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Secret Parameters"
        }
      },
      "required": [
        "data_path",
        "secret_name"
      ],
      "title": "GCSStorageBackendConfig",
      "type": "object"
    },
    "LocalStorageBackendConfig": {
      "description": "Local filesystem storage backend for DuckLake.",
      "properties": {
        "type": {
          "const": "local",
          "default": "local",
          "title": "Type",
          "type": "string"
        },
        "path": {
          "title": "Path",
          "type": "string"
        }
      },
      "required": [
        "path"
      ],
      "title": "LocalStorageBackendConfig",
      "type": "object"
    },
    "MotherDuckMetadataBackendConfig": {
      "description": "[MotherDuck](https://motherduck.com/)-managed metadata backend for [DuckLake](https://ducklake.select/).",
      "properties": {
        "type": {
          "const": "motherduck",
          "default": "motherduck",
          "title": "Type",
          "type": "string"
        },
        "database": {
          "title": "Database",
          "type": "string"
        },
        "region": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "AWS region of the MotherDuck-managed S3 storage (e.g. 'eu-central-1').",
          "title": "Region"
        }
      },
      "required": [
        "database"
      ],
      "title": "MotherDuckMetadataBackendConfig",
      "type": "object"
    },
    "PostgresMetadataBackendConfig": {
      "description": "PostgreSQL metadata backend for [DuckLake](https://ducklake.select/).",
      "properties": {
        "type": {
          "const": "postgres",
          "default": "postgres",
          "title": "Type",
          "type": "string"
        },
        "database": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Database"
        },
        "user": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "User"
        },
        "password": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Password"
        },
        "host": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Host"
        },
        "port": {
          "default": 5432,
          "title": "Port",
          "type": "integer"
        },
        "secret_name": {
          "title": "Secret Name",
          "type": "string"
        },
        "secret_parameters": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Secret Parameters"
        }
      },
      "required": [
        "secret_name"
      ],
      "title": "PostgresMetadataBackendConfig",
      "type": "object"
    },
    "R2StorageBackendConfig": {
      "description": "Cloudflare R2 storage backend for [DuckLake](https://ducklake.select/).\n\nUses the DuckDB ``TYPE R2`` secret which requires an ``ACCOUNT_ID``.",
      "properties": {
        "type": {
          "const": "r2",
          "default": "r2",
          "title": "Type",
          "type": "string"
        },
        "key_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Key Id"
        },
        "secret": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Secret"
        },
        "account_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Account Id"
        },
        "data_path": {
          "title": "Data Path",
          "type": "string"
        },
        "secret_name": {
          "title": "Secret Name",
          "type": "string"
        },
        "secret_parameters": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Secret Parameters"
        }
      },
      "required": [
        "data_path",
        "secret_name"
      ],
      "title": "R2StorageBackendConfig",
      "type": "object"
    },
    "S3StorageBackendConfig": {
      "description": "S3 storage backend for DuckLake.",
      "properties": {
        "type": {
          "const": "s3",
          "default": "s3",
          "title": "Type",
          "type": "string"
        },
        "key_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Key Id"
        },
        "secret": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Secret"
        },
        "endpoint": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Endpoint"
        },
        "bucket": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Bucket"
        },
        "prefix": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Prefix"
        },
        "region": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Region"
        },
        "url_style": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Url Style"
        },
        "use_ssl": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Use Ssl"
        },
        "scope": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Scope"
        },
        "data_path": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Data Path"
        },
        "secret_name": {
          "title": "Secret Name",
          "type": "string"
        },
        "secret_parameters": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Secret Parameters"
        }
      },
      "required": [
        "secret_name"
      ],
      "title": "S3StorageBackendConfig",
      "type": "object"
    },
    "SQLiteMetadataBackendConfig": {
      "description": "SQLite file-based metadata backend for [DuckLake](https://ducklake.select/).",
      "properties": {
        "type": {
          "const": "sqlite",
          "default": "sqlite",
          "title": "Type",
          "type": "string"
        },
        "uri": {
          "title": "Uri",
          "type": "string"
        }
      },
      "required": [
        "uri"
      ],
      "title": "SQLiteMetadataBackendConfig",
      "type": "object"
    }
  },
  "description": "[DuckLake](https://ducklake.select/) attachment configuration for a DuckDB connection.",
  "properties": {
    "metadata_backend": {
      "description": "Metadata catalog backend (DuckDB, SQLite, PostgreSQL, or MotherDuck).",
      "discriminator": {
        "mapping": {
          "duckdb": "#/$defs/DuckDBMetadataBackendConfig",
          "motherduck": "#/$defs/MotherDuckMetadataBackendConfig",
          "postgres": "#/$defs/PostgresMetadataBackendConfig",
          "sqlite": "#/$defs/SQLiteMetadataBackendConfig"
        },
        "propertyName": "type"
      },
      "oneOf": [
        {
          "$ref": "#/$defs/DuckDBMetadataBackendConfig"
        },
        {
          "$ref": "#/$defs/SQLiteMetadataBackendConfig"
        },
        {
          "$ref": "#/$defs/PostgresMetadataBackendConfig"
        },
        {
          "$ref": "#/$defs/MotherDuckMetadataBackendConfig"
        }
      ],
      "title": "Metadata Backend"
    },
    "storage_backend": {
      "anyOf": [
        {
          "discriminator": {
            "mapping": {
              "gcs": "#/$defs/GCSStorageBackendConfig",
              "local": "#/$defs/LocalStorageBackendConfig",
              "r2": "#/$defs/R2StorageBackendConfig",
              "s3": "#/$defs/S3StorageBackendConfig"
            },
            "propertyName": "type"
          },
          "oneOf": [
            {
              "$ref": "#/$defs/LocalStorageBackendConfig"
            },
            {
              "$ref": "#/$defs/S3StorageBackendConfig"
            },
            {
              "$ref": "#/$defs/R2StorageBackendConfig"
            },
            {
              "$ref": "#/$defs/GCSStorageBackendConfig"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Data storage backend (local filesystem, S3, R2, or GCS). Not required for MotherDuck.",
      "title": "Storage Backend"
    },
    "alias": {
      "default": "ducklake",
      "description": "DuckDB catalog alias for the attached DuckLake database.",
      "title": "Alias",
      "type": "string"
    },
    "attach_options": {
      "additionalProperties": true,
      "description": "Extra [DuckLake](https://ducklake.select/) ATTACH options (e.g., api_version, override_data_path).",
      "title": "Attach Options",
      "type": "object"
    },
    "data_inlining_row_limit": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Store inserts smaller than this row count directly in the metadata catalog instead of creating Parquet files.",
      "title": "Data Inlining Row Limit"
    }
  },
  "required": [
    "metadata_backend"
  ],
  "title": "DuckLakeAttachmentConfig",
  "type": "object"
}

metaxy.ext.metadata_stores._ducklake_support.DuckLakeAttachmentConfig.metadata_backend pydantic-field

metaxy.ext.metadata_stores._ducklake_support.DuckLakeAttachmentConfig.storage_backend pydantic-field

Data storage backend (local filesystem, S3, R2, or GCS). Not required for MotherDuck.

metaxy.ext.metadata_stores._ducklake_support.DuckLakeAttachmentConfig.alias pydantic-field

alias: str = 'ducklake'

DuckDB catalog alias for the attached DuckLake database.

[stores.dev.config.ducklake]
alias = "ducklake"
[tool.metaxy.stores.dev.config.ducklake]
alias = "ducklake"
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__ALIAS=ducklake

metaxy.ext.metadata_stores._ducklake_support.DuckLakeAttachmentConfig.attach_options pydantic-field

attach_options: dict[str, Any]

Extra DuckLake ATTACH options (e.g., api_version, override_data_path).

[stores.dev.config.ducklake]
attach_options = {}
[tool.metaxy.stores.dev.config.ducklake]
attach_options = {}
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__ATTACH_OPTIONS={}

metaxy.ext.metadata_stores._ducklake_support.DuckLakeAttachmentConfig.data_inlining_row_limit pydantic-field

data_inlining_row_limit: int | None = None

Store inserts smaller than this row count directly in the metadata catalog instead of creating Parquet files.

[stores.dev.config.ducklake]
data_inlining_row_limit = 0
[tool.metaxy.stores.dev.config.ducklake]
data_inlining_row_limit = 0
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__DATA_INLINING_ROW_LIMIT=...

Metadata Backends

DuckDB file-based metadata backend for DuckLake.

Show JSON schema:
{
  "description": "DuckDB file-based metadata backend for [DuckLake](https://ducklake.select/).",
  "properties": {
    "type": {
      "const": "duckdb",
      "default": "duckdb",
      "title": "Type",
      "type": "string"
    },
    "uri": {
      "title": "Uri",
      "type": "string"
    }
  },
  "required": [
    "uri"
  ],
  "title": "DuckDBMetadataBackendConfig",
  "type": "object"
}
metaxy.ext.metadata_stores._ducklake_support.DuckDBMetadataBackendConfig.uri pydantic-field
uri: str
[stores.dev.config.ducklake.metadata_backend]
uri = "..."
[tool.metaxy.stores.dev.config.ducklake.metadata_backend]
uri = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__METADATA_BACKEND__URI=...

SQLite file-based metadata backend for DuckLake.

Show JSON schema:
{
  "description": "SQLite file-based metadata backend for [DuckLake](https://ducklake.select/).",
  "properties": {
    "type": {
      "const": "sqlite",
      "default": "sqlite",
      "title": "Type",
      "type": "string"
    },
    "uri": {
      "title": "Uri",
      "type": "string"
    }
  },
  "required": [
    "uri"
  ],
  "title": "SQLiteMetadataBackendConfig",
  "type": "object"
}
metaxy.ext.metadata_stores._ducklake_support.SQLiteMetadataBackendConfig.uri pydantic-field
uri: str
[stores.dev.config.ducklake.metadata_backend]
uri = "..."
[tool.metaxy.stores.dev.config.ducklake.metadata_backend]
uri = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__METADATA_BACKEND__URI=...

PostgreSQL metadata backend for DuckLake.

Show JSON schema:
{
  "description": "PostgreSQL metadata backend for [DuckLake](https://ducklake.select/).",
  "properties": {
    "type": {
      "const": "postgres",
      "default": "postgres",
      "title": "Type",
      "type": "string"
    },
    "database": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Database"
    },
    "user": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "User"
    },
    "password": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Password"
    },
    "host": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Host"
    },
    "port": {
      "default": 5432,
      "title": "Port",
      "type": "integer"
    },
    "secret_name": {
      "title": "Secret Name",
      "type": "string"
    },
    "secret_parameters": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Secret Parameters"
    }
  },
  "required": [
    "secret_name"
  ],
  "title": "PostgresMetadataBackendConfig",
  "type": "object"
}
metaxy.ext.metadata_stores._ducklake_support.PostgresMetadataBackendConfig.database pydantic-field
database: str | None = None
[stores.dev.config.ducklake.metadata_backend]
database = "..."
[tool.metaxy.stores.dev.config.ducklake.metadata_backend]
database = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__METADATA_BACKEND__DATABASE=...
metaxy.ext.metadata_stores._ducklake_support.PostgresMetadataBackendConfig.user pydantic-field
user: str | None = None
[stores.dev.config.ducklake.metadata_backend]
user = "..."
[tool.metaxy.stores.dev.config.ducklake.metadata_backend]
user = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__METADATA_BACKEND__USER=...
metaxy.ext.metadata_stores._ducklake_support.PostgresMetadataBackendConfig.password pydantic-field
password: str | None = None
[stores.dev.config.ducklake.metadata_backend]
password = "..."
[tool.metaxy.stores.dev.config.ducklake.metadata_backend]
password = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__METADATA_BACKEND__PASSWORD=...
metaxy.ext.metadata_stores._ducklake_support.PostgresMetadataBackendConfig.host pydantic-field
host: str | None = None
[stores.dev.config.ducklake.metadata_backend]
host = "..."
[tool.metaxy.stores.dev.config.ducklake.metadata_backend]
host = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__METADATA_BACKEND__HOST=...
metaxy.ext.metadata_stores._ducklake_support.PostgresMetadataBackendConfig.port pydantic-field
port: int = 5432
[stores.dev.config.ducklake.metadata_backend]
port = 5432
[tool.metaxy.stores.dev.config.ducklake.metadata_backend]
port = 5432
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__METADATA_BACKEND__PORT=5432
metaxy.ext.metadata_stores._ducklake_support.PostgresMetadataBackendConfig.secret_name pydantic-field
secret_name: str
[stores.dev.config.ducklake.metadata_backend]
secret_name = "..."
[tool.metaxy.stores.dev.config.ducklake.metadata_backend]
secret_name = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__METADATA_BACKEND__SECRET_NAME=...
metaxy.ext.metadata_stores._ducklake_support.PostgresMetadataBackendConfig.secret_parameters pydantic-field
secret_parameters: dict[str, Any] | None = None
[stores.dev.config.ducklake.metadata_backend]
secret_parameters = {}
[tool.metaxy.stores.dev.config.ducklake.metadata_backend]
secret_parameters = {}
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__METADATA_BACKEND__SECRET_PARAMETERS=...

MotherDuck-managed metadata backend for DuckLake.

Show JSON schema:
{
  "description": "[MotherDuck](https://motherduck.com/)-managed metadata backend for [DuckLake](https://ducklake.select/).",
  "properties": {
    "type": {
      "const": "motherduck",
      "default": "motherduck",
      "title": "Type",
      "type": "string"
    },
    "database": {
      "title": "Database",
      "type": "string"
    },
    "region": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "AWS region of the MotherDuck-managed S3 storage (e.g. 'eu-central-1').",
      "title": "Region"
    }
  },
  "required": [
    "database"
  ],
  "title": "MotherDuckMetadataBackendConfig",
  "type": "object"
}
metaxy.ext.metadata_stores._ducklake_support.MotherDuckMetadataBackendConfig.database pydantic-field
database: str
[stores.dev.config.ducklake.metadata_backend]
database = "..."
[tool.metaxy.stores.dev.config.ducklake.metadata_backend]
database = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__METADATA_BACKEND__DATABASE=...
metaxy.ext.metadata_stores._ducklake_support.MotherDuckMetadataBackendConfig.region pydantic-field
region: str | None = None

AWS region of the MotherDuck-managed S3 storage (e.g. 'eu-central-1').

[stores.dev.config.ducklake.metadata_backend]
region = "..."
[tool.metaxy.stores.dev.config.ducklake.metadata_backend]
region = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__METADATA_BACKEND__REGION=...

Storage Backends

Local filesystem storage backend for DuckLake.

Show JSON schema:
{
  "description": "Local filesystem storage backend for DuckLake.",
  "properties": {
    "type": {
      "const": "local",
      "default": "local",
      "title": "Type",
      "type": "string"
    },
    "path": {
      "title": "Path",
      "type": "string"
    }
  },
  "required": [
    "path"
  ],
  "title": "LocalStorageBackendConfig",
  "type": "object"
}
metaxy.ext.metadata_stores._ducklake_support.LocalStorageBackendConfig.path pydantic-field
path: str
[stores.dev.config.ducklake.storage_backend]
path = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
path = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__PATH=...

S3 storage backend for DuckLake.

Show JSON schema:
{
  "description": "S3 storage backend for DuckLake.",
  "properties": {
    "type": {
      "const": "s3",
      "default": "s3",
      "title": "Type",
      "type": "string"
    },
    "key_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Key Id"
    },
    "secret": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Secret"
    },
    "endpoint": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Endpoint"
    },
    "bucket": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Bucket"
    },
    "prefix": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Prefix"
    },
    "region": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Region"
    },
    "url_style": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Url Style"
    },
    "use_ssl": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Use Ssl"
    },
    "scope": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Scope"
    },
    "data_path": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data Path"
    },
    "secret_name": {
      "title": "Secret Name",
      "type": "string"
    },
    "secret_parameters": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Secret Parameters"
    }
  },
  "required": [
    "secret_name"
  ],
  "title": "S3StorageBackendConfig",
  "type": "object"
}
metaxy.ext.metadata_stores._ducklake_support.S3StorageBackendConfig.key_id pydantic-field
key_id: str | None = None
[stores.dev.config.ducklake.storage_backend]
key_id = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
key_id = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__KEY_ID=...
metaxy.ext.metadata_stores._ducklake_support.S3StorageBackendConfig.secret pydantic-field
secret: str | None = None
[stores.dev.config.ducklake.storage_backend]
secret = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
secret = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__SECRET=...
metaxy.ext.metadata_stores._ducklake_support.S3StorageBackendConfig.endpoint pydantic-field
endpoint: str | None = None
[stores.dev.config.ducklake.storage_backend]
endpoint = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
endpoint = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__ENDPOINT=...
metaxy.ext.metadata_stores._ducklake_support.S3StorageBackendConfig.bucket pydantic-field
bucket: str | None = None
[stores.dev.config.ducklake.storage_backend]
bucket = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
bucket = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__BUCKET=...
metaxy.ext.metadata_stores._ducklake_support.S3StorageBackendConfig.prefix pydantic-field
prefix: str | None = None
[stores.dev.config.ducklake.storage_backend]
prefix = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
prefix = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__PREFIX=...
metaxy.ext.metadata_stores._ducklake_support.S3StorageBackendConfig.region pydantic-field
region: str | None = None
[stores.dev.config.ducklake.storage_backend]
region = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
region = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__REGION=...
metaxy.ext.metadata_stores._ducklake_support.S3StorageBackendConfig.url_style pydantic-field
url_style: str | None = None
[stores.dev.config.ducklake.storage_backend]
url_style = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
url_style = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__URL_STYLE=...
metaxy.ext.metadata_stores._ducklake_support.S3StorageBackendConfig.use_ssl pydantic-field
use_ssl: bool | None = None
[stores.dev.config.ducklake.storage_backend]
use_ssl = false
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
use_ssl = false
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__USE_SSL=...
metaxy.ext.metadata_stores._ducklake_support.S3StorageBackendConfig.scope pydantic-field
scope: str | None = None
[stores.dev.config.ducklake.storage_backend]
scope = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
scope = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__SCOPE=...
metaxy.ext.metadata_stores._ducklake_support.S3StorageBackendConfig.data_path pydantic-field
data_path: str | None = None
[stores.dev.config.ducklake.storage_backend]
data_path = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
data_path = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__DATA_PATH=...
metaxy.ext.metadata_stores._ducklake_support.S3StorageBackendConfig.secret_name pydantic-field
secret_name: str
[stores.dev.config.ducklake.storage_backend]
secret_name = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
secret_name = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__SECRET_NAME=...
metaxy.ext.metadata_stores._ducklake_support.S3StorageBackendConfig.secret_parameters pydantic-field
secret_parameters: dict[str, Any] | None = None
[stores.dev.config.ducklake.storage_backend]
secret_parameters = {}
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
secret_parameters = {}
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__SECRET_PARAMETERS=...

Cloudflare R2 storage backend for DuckLake.

Uses the DuckDB TYPE R2 secret which requires an ACCOUNT_ID.

Show JSON schema:
{
  "description": "Cloudflare R2 storage backend for [DuckLake](https://ducklake.select/).\n\nUses the DuckDB ``TYPE R2`` secret which requires an ``ACCOUNT_ID``.",
  "properties": {
    "type": {
      "const": "r2",
      "default": "r2",
      "title": "Type",
      "type": "string"
    },
    "key_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Key Id"
    },
    "secret": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Secret"
    },
    "account_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Account Id"
    },
    "data_path": {
      "title": "Data Path",
      "type": "string"
    },
    "secret_name": {
      "title": "Secret Name",
      "type": "string"
    },
    "secret_parameters": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Secret Parameters"
    }
  },
  "required": [
    "data_path",
    "secret_name"
  ],
  "title": "R2StorageBackendConfig",
  "type": "object"
}
metaxy.ext.metadata_stores._ducklake_support.R2StorageBackendConfig.key_id pydantic-field
key_id: str | None = None
[stores.dev.config.ducklake.storage_backend]
key_id = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
key_id = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__KEY_ID=...
metaxy.ext.metadata_stores._ducklake_support.R2StorageBackendConfig.secret pydantic-field
secret: str | None = None
[stores.dev.config.ducklake.storage_backend]
secret = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
secret = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__SECRET=...
metaxy.ext.metadata_stores._ducklake_support.R2StorageBackendConfig.account_id pydantic-field
account_id: str | None = None
[stores.dev.config.ducklake.storage_backend]
account_id = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
account_id = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__ACCOUNT_ID=...
metaxy.ext.metadata_stores._ducklake_support.R2StorageBackendConfig.data_path pydantic-field
data_path: str
[stores.dev.config.ducklake.storage_backend]
data_path = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
data_path = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__DATA_PATH=...
metaxy.ext.metadata_stores._ducklake_support.R2StorageBackendConfig.secret_name pydantic-field
secret_name: str
[stores.dev.config.ducklake.storage_backend]
secret_name = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
secret_name = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__SECRET_NAME=...
metaxy.ext.metadata_stores._ducklake_support.R2StorageBackendConfig.secret_parameters pydantic-field
secret_parameters: dict[str, Any] | None = None
[stores.dev.config.ducklake.storage_backend]
secret_parameters = {}
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
secret_parameters = {}
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__SECRET_PARAMETERS=...

Google Cloud Storage backend for DuckLake.

Uses the DuckDB TYPE GCS secret with HMAC authentication.

Show JSON schema:
{
  "description": "Google Cloud Storage backend for [DuckLake](https://ducklake.select/).\n\nUses the DuckDB ``TYPE GCS`` secret with HMAC authentication.",
  "properties": {
    "type": {
      "const": "gcs",
      "default": "gcs",
      "title": "Type",
      "type": "string"
    },
    "key_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Key Id"
    },
    "secret": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Secret"
    },
    "data_path": {
      "title": "Data Path",
      "type": "string"
    },
    "secret_name": {
      "title": "Secret Name",
      "type": "string"
    },
    "secret_parameters": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Secret Parameters"
    }
  },
  "required": [
    "data_path",
    "secret_name"
  ],
  "title": "GCSStorageBackendConfig",
  "type": "object"
}
metaxy.ext.metadata_stores._ducklake_support.GCSStorageBackendConfig.key_id pydantic-field
key_id: str | None = None
[stores.dev.config.ducklake.storage_backend]
key_id = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
key_id = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__KEY_ID=...
metaxy.ext.metadata_stores._ducklake_support.GCSStorageBackendConfig.secret pydantic-field
secret: str | None = None
[stores.dev.config.ducklake.storage_backend]
secret = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
secret = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__SECRET=...
metaxy.ext.metadata_stores._ducklake_support.GCSStorageBackendConfig.data_path pydantic-field
data_path: str
[stores.dev.config.ducklake.storage_backend]
data_path = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
data_path = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__DATA_PATH=...
metaxy.ext.metadata_stores._ducklake_support.GCSStorageBackendConfig.secret_name pydantic-field
secret_name: str
[stores.dev.config.ducklake.storage_backend]
secret_name = "..."
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
secret_name = "..."
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__SECRET_NAME=...
metaxy.ext.metadata_stores._ducklake_support.GCSStorageBackendConfig.secret_parameters pydantic-field
secret_parameters: dict[str, Any] | None = None
[stores.dev.config.ducklake.storage_backend]
secret_parameters = {}
[tool.metaxy.stores.dev.config.ducklake.storage_backend]
secret_parameters = {}
export METAXY_STORES__DEV__CONFIG__DUCKLAKE__STORAGE_BACKEND__SECRET_PARAMETERS=...