4

我正在尝试创建一个超级列族,它将复制这样的结构。

{ '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'}
}

我目前的尝试如下所示:

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}
];

但是,如果我尝试在 cassandra-cli 中运行上述内容:

java.lang.RuntimeException: org.apache.cassandra.db.marshal.MarshalException: unable to coerce 'open' to a  formatted date (long)

也许我不理解什么是超级列族,但任何帮助都会很棒。

谢谢。

4

2 回答 2

4

强烈建议您不要使用超级柱,尤其是在新设计中。它们从来都不是没有问题的,现在它们已被弃用,并且更有能力被复合键取代。

您的数据可以在 CQL 3 中像这样很好地表示,例如:

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

或者,根据您的期望,使用以下方法可能更有意义:

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

有关这些如何在 Cassandra 中转换为存储引擎范围的行的更多信息,请参阅本文

于 2012-05-19T17:37:05.580 回答
2

我可以知道您使用的是哪个 API 吗?如果是赫克托,那我可能会帮助你。但我个人建议你不要使用超级列,因为从超级列中获取子列列表是一件令人头疼的事情。此外,还有很多与性能相关的问题。此外,超级列正在被弃用。所以最好使用复合键。

于 2012-05-20T07:56:57.370 回答