在Cassandra CQL3中创建复合列键/名称

时间:2013-07-18 05:02:15

标签: cassandra composite-key cql3

我想在Cassandra中使用CQL3查询创建一个表,其结构类似于:

myTable
        myTable_uuid 
            <key_1|second_key_1> : <value_1>,
            <key_1|second_key_2> : <value_2>,
            <key_1|second_key_3> : <value_3>,
            <key_2|second_key_4> : <value_4>,
            <key_2|second_key_5> : <value_5>,
            <key_2|second_key_6> : <value_6>
            PRIMARY KEY(myTable_uuid, first_key_1, first_key_2, second_key_1)

表/ CF名称是'myTable',myTable_uuid是行键。另外,我想使用CQL3创建复合列密钥,以便能够对数据进行分组(key_1和key_2组成组)。这支持吗?如果是,有人可以帮我提供示例CQL3查询或语法。

目的:我正在尝试设计CF,以便数据/值按逻辑分组,类似于Cassandra在ebay博客(http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling-best-practices-part-1/)中解释的数据模型。

更新

我正在设计记住我的应用程序和我需要的查询。我应该使用真实的查询而不是虚拟,但这是我想要实现的:

myTable
        myTable_uuid 
            <email|fname> : <value_1>,
            <email|lname> : <value_2>,
            <email|age> : <value_3>,
            <email|timestamp> : <value_4>,
            <shool_id|school_name> : <value_5>,
            <shool_id|zip_code> : <value_6>
            PRIMARY KEY(myTable_uuid, email, school_id, school_name)

<email|fname> , <email|lname>, <email|age>, <shool_id|school_name> and <shool_id|zip_code>表现为'复合列键'而不是行键,表格的'myTable_uuid'就像它的行键一样。这种方法可以帮助我将数据分组为“email”和“school_id”。如何创建“复合列密钥”并且仅支持基于复合CK中的1个进行查询?例如:

SELECT fname, age WHERE email = 'xyz@gmail.com'

我正在使用Cassandra 1.2.6和CQL3。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:4)

是的,这是受支持的。 CQL3支持所有功能。 (除了删除列,但这很快就会修复,同时不占用太多存储空间而且是偏离主题的。)

在CQL3中,通过将复合列键添加到主键子句来创建复合列键。给定的第一个键形成行键,所有后续列形成(复合)列键。这blog entry explains it really well.

CREATE TABLE myTable 
(
  myId uuid, 
  key_1 varchar,
  key_2 varchar,
  value varchar, 
  PRIMARY KEY (myId, key_1, key_2)
);

因此,myId将是分区键,key_1和key_2将“分组”数据并形成复合列键。

希望有所帮助。

答案 1 :(得分:0)

根据支持的data types in CQL3

,我认为您想要的是key_1key_2属于map类型

答案 2 :(得分:0)

您应首先考虑需要执行的查询。然后考虑桌面设计。但是不要先考虑桌面设计。根据您的问题,您不清楚要执行哪些查询。我可以提出许多查询,这些表设计根本不适合。

如果您的问题是关于某些技术细节......那么,是的,Cassandra支持复合主键。

如果您在此处撰写查询,则可以获得更有价值的反馈。