---
title: "Cassandra feature support"
url: "https://docs.yugabyte.com/stable/explore/ycql-language/cassandra-feature-support/"
---

# Cassandra feature support

Summary of YugabyteDB's parity to Cassandra features

YugabyteDB supports most standard Cassandra features

Yugabyte Cloud Query Language (YCQL) has its roots in the [Cassandra Query Language (CQL)](https://cassandra.apache.org/doc/latest/cassandra/developing/cql/index.html "Cassandra Query Language (CQL)"). The following tables highlight the important differences in feature support between YCQL and Cassandra 3.4.2.

## Data types

### Primitive Types

|   | Category     | Types                                                                                                                                              |
|---|--------------|----------------------------------------------------------------------------------------------------------------------------------------------------|
|   | Integers     | [BIGINT, COUNTER, INT, INTEGER, SMALLINT, TINYINT, VARINT](/stable/api/ycql/type_int/ "BIGINT, COUNTER, INT, INTEGER, SMALLINT, TINYINT, VARINT") |
|   | Numbers      | [DECIMAL, DOUBLE, FLOAT](/stable/api/ycql/type_number/ "DECIMAL, DOUBLE, FLOAT")                                                                  |
|   | Binary data  | [BLOB](/stable/api/ycql/type_blob/ "BLOB")                                                                                                        |
|   | Boolean      | [BOOLEAN](/stable/api/ycql/type_bool/ "BOOLEAN")                                                                                                  |
|   | Date/Time    | [DATE, TIME, TIMESTAMP](/stable/api/ycql/type_datetime/ "DATE, TIME, TIMESTAMP")                                                                  |
|   | Collections  | [FROZEN](/stable/api/ycql/type_frozen/ "FROZEN"), [LIST, MAP, SET](/stable/api/ycql/type_collection/ "LIST, MAP, SET")                           |
|   | IP Addresses | [INET](/stable/api/ycql/type_inet/ "INET")                                                                                                        |
|   | JSON         | [JSONB](/stable/api/ycql/type_jsonb/ "JSONB")                                                                                                     |
|   | String       | [TEXT, VARCHAR](/stable/api/ycql/type_text/ "TEXT, VARCHAR")                                                                                      |
|   | UUID         | [TIMEUUID, UUID](/stable/api/ycql/type_uuid/ "TIMEUUID, UUID")                                                                                    |
|   | TUPLE        |                                                                                                                                                    |

### User defined data types

|   | Operation       | Details                                                         |
|---|-----------------|-----------------------------------------------------------------|
|   | Create new type | [CREATE TYPE](/stable/api/ycql/ddl_create_type/ "CREATE TYPE") |
|   | Delete types    | [DROP TYPE](/stable/api/ycql/ddl_drop_type/ "DROP TYPE")       |
|   | Alter types     |                                                                 |

## DDL

### Keyspaces

|   | Operation                      | Details                                                                          |
|---|--------------------------------|----------------------------------------------------------------------------------|
|   | Creating keyspace              | [CREATE KEYSPACE](/stable/api/ycql/ddl_create_keyspace/ "CREATE KEYSPACE")      |
|   | Check before creating keyspace | `CREATE KEYSPACE IF NOT EXISTS`                                                  |
|   | Modifying keyspace             | [ALTER KEYSPACE](/stable/api/ycql/ddl_alter_keyspace/ "ALTER KEYSPACE") - No Op |
|   | Check before altering keyspace | `ALTER KEYSPACE IF EXISTS`                                                       |

### Tables

|   | Operation                    | Details                                                                                        |
|---|------------------------------|------------------------------------------------------------------------------------------------|
|   | Adding columns               | [ADD COLUMN](/stable/api/ycql/ddl_alter_table/#add-a-column-to-a-table "ADD COLUMN")          |
|   | Altering tables              | [ALTER TABLE](/stable/api/ycql/ddl_alter_table/ "ALTER TABLE")                                |
|   | Removing columns             | [DROP COLUMN](/stable/api/ycql/ddl_alter_table/#remove-a-column-from-a-table "DROP COLUMN")   |
|   | Rename column's name         | [RENAME COLUMN](/stable/api/ycql/ddl_alter_table/#rename-a-column-in-a-table "RENAME COLUMN") |
|   | Check before altering tables | `ALTER TABLE IF EXISTS`                                                                        |

### Indexes

|   | Operation                    | Details                                                                                          |
|---|------------------------------|--------------------------------------------------------------------------------------------------|
|   | Adding indexes               | [CREATE INDEX](/stable/api/ycql/ddl_create_index/ "CREATE INDEX")                               |
|   | Removing indexes             | [DROP INDEX](/stable/api/ycql/ddl_drop_index/ "DROP INDEX")                                     |
|   | Partial indexes              | [Partial indexes](/stable/api/ycql/ddl_create_index/#partial-index "Partial indexes")           |
|   | Covering indexes             | [Covering indexes](/stable/api/ycql/ddl_create_index/#included-columns "Covering indexes")      |
|   | Unique indexes               | [Unique indexes](/stable/api/ycql/ddl_create_index/#unique-index "Unique indexes")              |
|   | Adding indexes on Collection | Cannot create index on `map/list/set/full jsonb/udt` and the keys,values,entries of a collection |

## DML

### Select

|   | Operation                                 | Details                                                                                                 |
|---|-------------------------------------------|---------------------------------------------------------------------------------------------------------|
|   | Select columns                            | [SELECT * FROM ...](/stable/api/ycql/dml_select/ "SELECT * FROM ...")                                  |
|   | Conditional select with `[NOT] IN` clause | [SELECT ... WHERE key IN ...](/stable/api/ycql/dml_select/#where-clause "SELECT ... WHERE key IN ...") |
|   | Conditional select with `IF` clause       | [SELECT ... IF ...](/stable/api/ycql/dml_select/#if-clause "SELECT ... IF ...")                        |
|   | Select using `CONTAINS [KEY]`             | [SELECT * FROM ...](/stable/api/ycql/dml_select/ "SELECT * FROM ...")                                  |
|   | `SELECT JSON`                             | [JSONB](/stable/api/ycql/type_jsonb/ "JSONB") is supported as a native type                            |
|   | Select with `PER PARTITION LIMIT`         |                                                                                                         |
|   | Grouping results with `GROUP BY`          |                                                                                                         |

### Update

|   | Operation                                 | Details                                                                           |
|---|-------------------------------------------|-----------------------------------------------------------------------------------|
|   | Update columns                            | [UPDATE](/stable/api/ycql/dml_update/ "UPDATE") - Only single row updates        |
|   | Conditional update with `[NOT] IN` clause | Only single row updates                                                           |
|   | Conditional update with `IF` clause       | [UPDATE ... IF](/stable/api/ycql/dml_update/#if-clause "UPDATE ... IF")          |
|   | Update with `USING` clause                | [UPDATE ... USING](/stable/api/ycql/dml_update/#using-clause "UPDATE ... USING") |
|   | Conditional Update using `CONTAINS [KEY]` | `UPDATE ... WHERE <col> CONTAINS ...`                                             |

### Delete

|   | Operation                                 | Details                                                                                         |
|---|-------------------------------------------|-------------------------------------------------------------------------------------------------|
|   | Delete rows                               | [DELETE](/stable/api/ycql/dml_delete/ "DELETE") - Only single row deletes                      |
|   | Conditional delete with `IF` clause       | [DELETE ... IF](/stable/api/ycql/dml_delete/#if-clause "DELETE ... IF")                        |
|   | Delete with `USING` clause                | [DELETE ... USING](/stable/api/ycql/dml_delete/#using-clause "DELETE ... USING")               |
|   | Conditional delete with `[NOT] IN` clause | [Only single row deletes](/stable/api/ycql/dml_delete/#where-clause "Only single row deletes") |
|   | Conditional delete using `CONTAINS [KEY]` | `DELETE ... WHERE <col> CONTAINS ...`                                                           |

### Insert

|   | Operation      | Details                                                                      |
|---|----------------|------------------------------------------------------------------------------|
|   | Adding columns | [INSERT ... INTO ...](/stable/api/ycql/dml_insert/ "INSERT ... INTO ...")   |
|   | `INSERT JSON`  | [JSONB](/stable/api/ycql/type_jsonb/ "JSONB") is supported as a native type |

## Transactions

|   | Feature                      | Details                                                                                |
|---|------------------------------|----------------------------------------------------------------------------------------|
|   | Begin a transaction          | [BEGIN TRANSACTION](/stable/api/ycql/dml_transaction/ "BEGIN TRANSACTION")            |
|   | End a transaction            | [END TRANSACTION](/stable/api/ycql/dml_transaction/ "END TRANSACTION")                |
|   | SQL style transaction start  | [START TRANSACTION](/stable/api/ycql/dml_transaction/#sql-syntax "START TRANSACTION") |
|   | SQL style transaction commit | [COMMIT](/stable/api/ycql/dml_transaction/#sql-syntax "COMMIT")                       |

## Security

|   | Component          | Details                                                                                                                   |
|---|--------------------|---------------------------------------------------------------------------------------------------------------------------|
|   | Roles              | [Manage users and roles](/stable/secure/authorization/create-roles-ycql/ "Manage users and roles")                       |
|   | Permissions        | [Grant privileges](/stable/secure/authorization/ycql-grant-permissions/ "Grant privileges")                              |
|   | Users              | Legacy Cassandra feature (*CREATE, DROP, ALTER, LIST*)                                                                    |
|   | `LIST ROLES`       | But can be done using [query](/stable/secure/authorization/create-roles-ycql/ "query")                                   |
|   | `LIST PERMISSIONS` | But can be done using [query](/stable/secure/authorization/ycql-grant-permissions/#2-list-permissions-for-roles "query") |

## Other Features

|   | Component                    | Details                                                                                                                   |
|---|------------------------------|---------------------------------------------------------------------------------------------------------------------------|
|   | Aggregates                   | [AVG, COUNT, MAX, MIN, SUM](/stable/api/ycql/expr_fcall/#aggregate-functions "AVG, COUNT, MAX, MIN, SUM")                |
|   | Built-in Functions           | [Now, DateOf, CurrentTime, ToTime, UUID ...](/stable/api/ycql/expr_fcall/ "Now, DateOf, CurrentTime, ToTime, UUID ... ") |
|   | Operators                    | [Binary, Unary, Null operators](/stable/api/ycql/expr_ocall/ "Binary, Unary, Null operators")                            |
|   | Batch                        | Only programmatically via [BatchStatement](/stable/api/ycql/batch/ "BatchStatement")                                     |
|   | Materialized Views           |                                                                                                                           |
|   | Triggers                     |                                                                                                                           |
|   | User Defined Aggregates(UDA) |                                                                                                                           |
|   | User-defined functions(UDF)  |                                                                                                                           |

## Learn more

- [Comparison with Apache Cassandra](/stable/faq/comparisons/cassandra/ "Comparison with Apache Cassandra")
- [YCQL command reference](/stable/api/ycql/ "YCQL command reference")
