title: 'ScyllaDB Data Connector' sidebar_label: 'ScyllaDB Data Connector' description: 'ScyllaDB Data Connector Documentation' tags:
The ScyllaDB Data Connector enables federated SQL queries on data stored in ScyllaDB (opens in a new tab) clusters using CQL (Cassandra Query Language).
:::note[Enterprise edition]
The ScyllaDB Data Connector is available in the Spice Enterprise edition (opens in a new tab). It is feature-gated and not included in the default open source build; open source users can build it from source with the scylladb feature (make install-scylladb).
:::
fromThe from field takes the form scylladb:{table_name} where table_name is the table identifier in the ScyllaDB keyspace to read from.
nameThe dataset name. This will be used as the table name within Spice.
Example:
The dataset name cannot be a reserved keyword (opens in a new tab).
paramsThe ScyllaDB data connector can be configured by providing the following params. Use the secret replacement syntax (opens in a new tab) to load the secret from a secret store, e.g. ${secrets:scylladb_pass}.
| Parameter Name | Description | Required | Default |
|---|---|---|---|
scylladb_host | Hostname(s) of ScyllaDB nodes. Comma-separated for multiple nodes. Either scylladb_host or scylladb_hosts must be provided. | Yes* | - |
scylladb_hosts | Alternative to scylladb_host. Comma-separated list of hostnames. Either scylladb_host or scylladb_hosts must be provided. | Yes* | - |
scylladb_port | ScyllaDB CQL native transport port. | No | 9042 |
scylladb_keyspace | The keyspace to use for queries. | Yes | - |
scylladb_user | Username for authentication. | No | - |
scylladb_pass | Password for authentication. | No | - |
scylladb_datacenter | Preferred datacenter for connection routing. | No | - |
scylladb_ssl | Enable SSL/TLS for connections. Not yet implemented — the parameter is accepted but has no effect. | No | - |
connection_timeout | Connection timeout in milliseconds. | No | 10000 |
The table below shows the CQL data types supported, along with the type mapping to Apache Arrow types in Spice.
| CQL Type | Arrow Type | Notes |
|---|---|---|
boolean | Boolean | |
tinyint | Int8 | |
smallint | Int16 | |
int | Int32 | |
bigint | Int64 | |
counter | Int64 | Cassandra counter type |
float | Float32 | |
double | Float64 | |
decimal | Decimal128(38, 2) | Arbitrary precision → fixed precision |
blob | Binary | |
date | Date32 | Days since epoch |
timestamp | Timestamp(Millisecond, None) | Milliseconds since epoch |
time | Timestamp(Microsecond, None) | Time of day |
text, varchar, ascii | Utf8 | |
uuid, timeuuid | Utf8 | String representation |
inet | Utf8 | IP address as string |
varint | Utf8 | Arbitrary precision integer as string |
duration | Utf8 | ISO 8601 duration string |
list<T>, set<T>, map<K,V> | Utf8 | JSON string representation |
tuple<...> | Utf8 | String representation |
frozen<T> | Utf8 | Same as underlying collection |
| User-Defined Types | Utf8 | String representation |
CQL decimal is an arbitrary-precision type, while Arrow Decimal128 has a maximum precision of 38 digits. The connector uses:
If a CQL decimal value cannot be represented exactly at this precision and scale — because rescaling to scale 2 would drop non-zero fractional digits, or the mantissa does not fit in 128 bits — the connector returns a query error rather than silently truncating, rounding, or returning NULL. Values that rescale losslessly are converted normally.
date: Stored as days since epoch with a 2^31 offset. Converted to Arrow Date32 (signed days since 1970-01-01).timestamp: Milliseconds since Unix epoch. Directly mapped to Arrow Timestamp(Millisecond).time: Nanoseconds since midnight. Converted to Arrow Timestamp(Microsecond) with nanosecond truncation.The connector pushes down partition key and clustering key filters to CQL where possible. Filters that CQL cannot express are evaluated locally by DataFusion after data retrieval. Joins, aggregations, and other SQL operations are always performed locally.
The following filters are pushed down to ScyllaDB:
| Filter type | Operators | Pushdown behavior |
|---|---|---|
| Partition key equality | = | Always pushed down (Exact) |
| Clustering key comparison | =, <, <=, >, >= | Pushed down when a partition key equality filter is present (Inexact) |
| Regular column filters | Any | Not pushed down — evaluated locally by DataFusion |
| OR conditions, complex expressions | Any | Not pushed down — evaluated locally by DataFusion |
Clustering key filters are marked as Inexact, meaning DataFusion re-checks them after retrieval to ensure correctness.
CQL lacks many SQL constructs, which is why most filter types cannot be pushed down:
| Feature | SQL | CQL |
|---|---|---|
| CASE WHEN | ✅ | ❌ |
| Subqueries | ✅ | ❌ |
| Complex JOINs | ✅ | ❌ |
| CAST expressions | ✅ | ❌ |
| INTERVAL | ✅ | ❌ |
| Window functions | ✅ | ❌ |
| NULLS FIRST/LAST | ✅ | ❌ |
| COUNT(DISTINCT) | ✅ | ❌ |
| Arbitrary WHERE | ✅ | ❌ |
Projection pushdown is supported — only the columns referenced in the query are fetched from ScyllaDB.
Query results are streamed using the scylla driver's paging mechanism in batches of 8192 rows, minimizing memory usage for large result sets.
See the dedicated Performance (opens in a new tab) page — partition/clustering-key filters, enabling acceleration, datacenter locality, and connection-timeout tuning.
The following SQL operations cannot be pushed down to ScyllaDB and are performed locally:
Spice integrates with multiple secret stores to help manage sensitive data securely. For detailed information on supported secret stores, refer to the secret stores documentation (opens in a new tab). Additionally, learn how to use referenced secrets in component parameters by visiting the using referenced secrets guide (opens in a new tab).