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).
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:
For decimals that exceed this precision, values may be truncated or rounded.
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.
Partition key and clustering key filters reduce the amount of data transferred from ScyllaDB, but queries without these filters fetch all table data. Consider the following optimizations:
For frequently queried data, enable Spice acceleration to cache data locally:
Set the datacenter preference to route queries to the nearest nodes:
Set connection timeouts appropriately for your network:
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).