# DuckDB Data Accelerator

To use DuckDB as Data Accelerator, specify `duckdb` as the `engine` for acceleration.

```yaml
datasets:
  - from: spice.ai:path.to.my_dataset
    name: my_dataset
    acceleration:
      engine: duckdb
```

> **Warning**
>
> Spice v2.4 deprecates the `duckdb` engine, and Spice v2.5 removes it. Move each acceleration to [Spice Cayenne](https://spiceai.org/docs/components/data-accelerators/cayenne): set `engine: cayenne`. On native Windows, Cayenne is not available: run Spice in Docker or WSL first. Restart Spice and confirm that Cayenne finished its first load before you delete anything. The old acceleration can hold data that the source no longer has. Then delete the DuckDB database file and its `.wal` file, unless another dataset still uses that file on `duckdb`. A `mode: memory` acceleration leaves no file. See the [Cayenne migration guide](https://spiceai.org/docs/components/data-accelerators/cayenne/migration).

## Configuration

The DuckDB accelerator supports `mode: memory`, `mode: file`, `mode: file_create`, and `mode: file_update`.

Configuration `params` are provided in the `acceleration` section for a data store. Other common `acceleration` fields can be configured for DuckDB, see see [datasets](https://docs.spiceai.org/components/data-accelerators).

> **Warning**
>
> **LIMITATIONS**
>
> - The DuckDB accelerator does not support nested lists, or structs with nested structs/lists [field types](https://duckdb.org/docs/sql/data_types/overview). For example:
>   - Supported:
>     - `SELECT {'x': 1, 'y': 2, 'z': 3}`
>   - Unsupported:
>     - `SELECT [['duck', 'goose', 'heron'], ['frog', 'toad']]`
>     - `SELECT {'x': [1, 2, 3]}`
> - The DuckDB accelerator does not support enum, dictionary, or map [field types](https://duckdb.org/docs/sql/data_types/overview). For example:
>   - Unsupported:
>     - `SELECT MAP(['key1', 'key2', 'key3'], [10, 20, 30])`
> - The DuckDB accelerator does not support `Decimal256` (76 digits), as it exceeds DuckDB's maximum Decimal width of 38 digits.
> - Updating a dataset with DuckDB acceleration while the Spice Runtime is running (hot-reload) will cause the DuckDB accelerator query federation to disable until the Runtime is restarted.

> **Warning**
>
> **MEMORY CONSIDERATIONS**
>
> When accelerating a dataset using `mode: memory` (the default), some or all of the dataset is loaded into memory. Ensure sufficient memory is available, including overhead for queries and the runtime, especially with concurrent queries.
