2

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

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,以便对数据/值进行逻辑分组,类似于 ebay 博客 ( http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling ) 中 Cassandra 中解释的数据模型-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”,因为它是行键。这种方法将帮助我将我的数据分组为“电子邮件”和“学校 ID”。如何创建“复合列键”,是否支持仅基于 1 个复合 CK 进行查询?例如:

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

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

4

3 回答 3

4

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

在 CQL3 中,复合列键是通过将它们添加到主键子句来创建的。给定的第一个键形成行键,所有后续列形成(复合)列键。这篇博文解释得很好。

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 将“分组”数据并形成复合列键。

希望有帮助。

于 2013-07-18T08:00:50.047 回答
0

我认为你想要的是根据CQL3中支持的数据类型拥有key_1andkey_2类型map

于 2013-07-18T07:45:12.177 回答
0

您应该首先考虑需要执行的查询。然后想想桌子的设计。但不要首先考虑餐桌设计。从您的问题中不清楚您将执行哪些查询。我可以提出许多查询,但这种表设计根本不适合。

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

如果您在这里写下您的查询,您可以获得更多有价值的反馈。

于 2013-07-18T12:27:08.313 回答