Search code examples
javacassandracqlcql3datastax-java-driver

How to add arbitrary columns to Cassandra using CQL with Datastax Java driver?


I have recently started taking much interest in CQL as I am thinking to use Datastax Java driver. Previously, I was using column family instead of table and I was using Astyanax driver. I need to clarify something here-

I am using the below column family definition in my production cluster. And I can insert any arbitrary columns (with its value) on the fly without actually modifying the column family schema.

create column family FAMILY_DATA
with key_validation_class = 'UTF8Type'
and comparator = 'UTF8Type'
and default_validation_class = 'BytesType'
and gc_grace = 86400;

But after going through this post, it looks like- I need to alter the schema every time whenever I am getting a new column to insert which is not what I want to do... As I believe CQL3 requires column metadata to exist...

Is there any other way, I can still add arbitrary columns and its particular value if I am going with Datastax Java driver?

Any code samples/example will help me to understand better.. Thanks..


Solution

  • I believe in CQL you solve this problem using collections.

    You can define the data type of a field to be a map, and then insert arbitrary numbers of key-value pairs into the map, that should mostly behave as dynamic columns did in traditional Thrift.

    Something like:

    CREATE TABLE data ( data_id int PRIMARY KEY, data_time long, data_values map );
    INSERT INTO data (data_id, data_time, data_values) VALUES (1, 21341324, {'sum': 2134, 'avg': 44.5 });
    

    Here is more information.

    Additionally, you can find the mapping between the CQL3 types and the Java types used by the DataStax driver here.