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.