Cassandra Super Column Family Schema Creation

cassandra, nosql, time-series

Solution

It is very strongly recommended that you not use supercolumns, especially in new design. They have never been problem-free, and now they are deprecated and much more capably replaced by composite keys.

Your data could be nicely represented like this in CQL 3, for example:

CREATE TABLE Timestep (
    hardware ascii,
    when timestamp,
    metric1 double,
    metric2 double,
    PRIMARY KEY (hardware, when)
);

Or, depending on exactly what you expect to have, it may make more sense to use:

CREATE TABLE Timestep (
    hardware ascii,
    metricname ascii,
    when timestamp,
    value double,
    PRIMARY KEY (hardware, metricname, when)
) WITH COMPACT STORAGE;

See this article for more information on how these translate to storage engine wide rows in Cassandra.

Problem

I am trying to create a Super Column Family that will replicate a structure like this. ``` { 'hd': '2008/12/12 10:03': { metric1: 'blah', metric2: 'blah'} '2008/12/2 9:03': { metric1: 'blah', metric2: 'blah'} 'cpu': '2008/12/12 10:03': { metric1: 'blah', metric2: 'blah'} '2008/12/2 9:03': { metric1: 'blah', metric2: 'blah'} } ``` My current try looks like this: ``` create column family Timestep with column_type = 'Super' and comparator = 'AsciiType' and subcomparator = 'DateType' and default_validation_class = 'DoubleType' and key_validation_class = 'AsciiType' and column_metadata = [ {column_name : metric1, validation_class : DoubleType} {column_name : metric2, validation_class : DoubleType} ]; ``` But if I try and run the above in the cassandra-cli: ``` java.lang.RuntimeException: org.apache.cassandra.db.marshal.MarshalException: unable to coerce 'open' to a formatted date (long) ``` Maybe I am not understanding what a super column family is properly, but any help would be awesome. Thanks.

Original source