# In-Memory Arrow Data Accelerator

The In-Memory Arrow Data Accelerator uses Apache Arrow to store data in memory for fast access and query performance. In Spice v2.3 and earlier, it is the default data accelerator. From Spice v2.4, it is the default only on native Windows. On Linux and macOS, the default is [Spice Cayenne](https://spiceai.org/docs/components/data-accelerators/cayenne).

> **Warning**
>
> Spice v2.4 deprecates the `arrow` engine, and Spice v2.5 removes it. Move each acceleration to Cayenne: set `engine: cayenne`, or remove `engine` on Linux and macOS. On native Windows, run Spice in Docker or WSL to use Cayenne. Arrow holds data in memory only, so it leaves no files to delete. See the [Cayenne migration guide](https://spiceai.org/docs/components/data-accelerators/cayenne/migration).

## Configuration

To use the In-Memory Arrow Data Accelerator, set `arrow` as the `engine` for acceleration. In Spice v2.3 and earlier, and on native Windows, an acceleration with no `engine` also uses Arrow.

```yaml
datasets:
  - from: spice.ai:path.to.my_dataset
    name: my_dataset
    acceleration:
      enabled: true
      engine: arrow
```

> **Warning**
>
> **Limitations**
>
> - The In-Memory Arrow Data Accelerator does not support persistent storage. Data is stored in-memory and will be lost when the Spice runtime is stopped.
> - The In-Memory Arrow Data Accelerator does not support `Decimal256` (76 digits), as it exceeds Arrow's maximum Decimal width of 38 digits.
> - The In-Memory Arrow Data Accelerator does not support [indexes](https://docs.spiceai.org/features/data-acceleration/indexes).
> - The In-Memory Arrow Data Accelerator only supports primary-key [constraints](https://docs.spiceai.org/features/data-acceleration/constraints), not `unique` constraints.
> - With Arrow acceleration, mathematical operations like `value1 / value2` are treated as integer division if the values are integers. For example, `1 / 2` will result in 0 instead of the expected 0.5. Use casting to FLOAT to ensure conversion to a floating-point value: `CAST(1 AS FLOAT) / CAST(2 AS FLOAT)` (or `CAST(1 AS FLOAT) / 2`).
