我想在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。任何帮助表示赞赏。
答案 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)
答案 2 :(得分:0)
您应首先考虑需要执行的查询。然后考虑桌面设计。但是不要先考虑桌面设计。根据您的问题,您不清楚要执行哪些查询。我可以提出许多查询,这些表设计根本不适合。
如果您的问题是关于某些技术细节......那么,是的,Cassandra支持复合主键。
如果您在此处撰写查询,则可以获得更有价值的反馈。