gpt4 book ai didi

cassandra - 使用复合键查询,而不是 Cassandra 中的 Row Key

转载 作者:行者123 更新时间:2023-12-04 10:25:47 25 4
gpt4 key购买 nike

我想通过 CQL3 中除 Row Key 以外的复合键查询数据过滤。
这些是我的疑问:

CREATE TABLE grades (id int,
date timestamp,
subject text,
status text,
PRIMARY KEY (id, subject, status, date)
);

当我尝试访问数据时,
SELECT * FROM grades where id = 1098; //works fine
SELECT * FROM grades where subject = 'English' ALLOW FILTERING; //works fine
SELECT * FROM grades where status = 'Active' ALLOW FILTERING; //gives an error

Bad Request: PRIMARY KEY part status cannot be restricted (preceding part subject is either not restricted or by a non-EQ relation)



只是为了试验,我一直在将“id”作为我的主行键来调整键。我总是只能使用主行键或第二个键进行查询,考虑到上面的例子,如果我在主键列表中交换主题和状态,我可以用状态查询,但如果我尝试这样做,我会得到类似的错误主题或时间。

难道我做错了什么?我不能使用 CQL3 中的任何其他组合键查询数据吗?
我正在使用 Cassandra 1.2.6 和 CQL3。

最佳答案

根据 Cassandra 复合 key 模型 (http://www.datastax.com/docs/1.2/cql_cli/cql/SELECT),这看起来是所有正常行为。 Cassandra 数据模型旨在(这是一种通用的 NoSQL 思维方式)授予查询是高性能的,这以对存储和索引数据的方式以及查询方式的“限制”为代价,即您主键上的“总是需要限制主题的前面部分”。

您不能交换查询的主键列表上的元素(这更像是一种 SQL 思维方式)。如果要使用复合键的多个元素,则始终需要“约束”/“限制”主键的前一个元素。这意味着如果您有复合键 = (id, subject, status, date) 并且想要查询“status”,您将需要限制“id”和/或“subject”(如果您使用“或”是可能的“允许过滤”,即您可以只限制“主题”而不需要限制“id”)。因此,如果您想查询“状态”,您将能够以两种不同的方式进行查询:

select * from grades where id = '1093' and subject = 'English' and status = 'Active';



或者

select * from grades where subject = 'English' and status = 'Active' allow filtering;



第一个是针对特定“学生”的,第二个是针对 status =“Active”的主题的所有“学生”。

关于cassandra - 使用复合键查询,而不是 Cassandra 中的 Row Key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17735825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com