Cassandra复合柱结构和插入

时间:2013-06-06 07:22:58

标签: cassandra cassandra-0.7 cassandra-cli

我想通过CQL 3在复合列族中插入数据。

create column family marks with 
comparator = 'CompositeType(DateType,UTF8Type,UTF8Type)' AND 
key_validation_class=UTF8Type AND
default_validation_class=UTF8Type;

结构将使用cassandra-cli shell进行一次,结果将保存在cassandra中

**63**  (2013-06-04 00:00:00 UTC, Science, 89.00): ''
        (2013-06-04 00:00:00 UTC, Mathematics, 80.00): ''
        (2013-06-04 00:00:00 UTC, English, 90.00):''

此处行键为63,即主键和唯一键。数据只会在列名中保存在cassandra中。什么是插入查询,以及什么是最适合实现此CQL3或thrift的驱动程序。

1 个答案:

答案 0 :(得分:1)

在CQL3中,您可以使用复合主键执行此操作:

CREATE TABLE marks (
  id text,
  date timestamp,
  subject text,
  mark text,
  PRIMARY KEY (id, date, subject, mark)
)

使用此架构,id是行键,因为它首先列出。列名是date:subject:mark。

的组合

然后您可以插入:

insert into marks (id, date, subject, mark) values ('63', '2013-06-04 00:00:00 UTC', 'Science', '89.00');
insert into marks (id, date, subject, mark) values ('63', '2013-06-04 00:00:00 UTC', 'Mathematics', '80.00');
insert into marks (id, date, subject, mark) values ('63', '2013-06-04 00:00:00 UTC', 'English', '90.00');

并列出:

> select * from marks;

 id | date                     | subject     | mark
----+--------------------------+-------------+-------
 63 | 2013-06-04 01:00:00+0100 |     English | 90.00
 63 | 2013-06-04 01:00:00+0100 | Mathematics | 80.00
 63 | 2013-06-04 01:00:00+0100 |     Science | 89.00

您可能希望将标记存储为int(或可能是浮点数),以便您可以在查询中进行数字比较。

您还可以将标记存储在列值而不是列名称中。为此,请从主键中删除标记。然后你可以,例如建立标记的二级索引。