卡桑德拉过滤可能吗?
Cassandra filtering possible?
我有一个 Cassandra table 是这样创建的:
CREATE TABLE table(
num int,
part_key int,
val1 int,
val2 float,
val3 text,
...,
PRIMARY KEY((part_key), num)
);
part_key 是每条记录 1,因为我想执行范围查询并且只有一台服务器(我知道这不是一个好的用例)。 num 是从 1 到 1.000.000 的记录编号。我已经可以 运行 查询
SELECT num, val43 FROM table WHERE part_key=1 and num<5000;
是否可以在 Cassandra 中进行更多过滤,例如:
... AND val45>463;
我认为这不可能,但有人可以解释为什么吗?
现在我在我的代码中进行这种过滤,但还有其他可能性吗?
我希望我没有错过 post 已经解释了这一点。
感谢您的帮助!
Cassandra 范围查询只能在查询指定的最后一个聚类列上进行。所以,如果你的 pk 是 (a,b,c,d),你可以做
... where a=2, b=4, c>5
... where a=2, b>4
但不是
... 其中 a=2,c>5
这是因为数据存储在分区中,按分区键(pk 的第一个键)索引,然后按每个连续的聚簇键排序。
如果你有确切的值,你可以添加一个二级索引到 val 4 然后做
... and val4=34
但仅此而已。即便如此,您还是希望在应用索引之前访问一个分区。否则你会得到一个可能超时的集群范围的查询。
由于 cassandra 存储数据以进行快速插入和检索的方式,存在查询限制。一个分区中的所有数据都放在一起,所以在分区客户端内部查询通常不是问题,除非你有非常大的宽行(在这种情况下,也许应该检查模式)。
希望对您有所帮助。
我有一个 Cassandra table 是这样创建的:
CREATE TABLE table(
num int,
part_key int,
val1 int,
val2 float,
val3 text,
...,
PRIMARY KEY((part_key), num)
);
part_key 是每条记录 1,因为我想执行范围查询并且只有一台服务器(我知道这不是一个好的用例)。 num 是从 1 到 1.000.000 的记录编号。我已经可以 运行 查询
SELECT num, val43 FROM table WHERE part_key=1 and num<5000;
是否可以在 Cassandra 中进行更多过滤,例如:
... AND val45>463;
我认为这不可能,但有人可以解释为什么吗? 现在我在我的代码中进行这种过滤,但还有其他可能性吗?
我希望我没有错过 post 已经解释了这一点。
感谢您的帮助!
Cassandra 范围查询只能在查询指定的最后一个聚类列上进行。所以,如果你的 pk 是 (a,b,c,d),你可以做
... where a=2, b=4, c>5
... where a=2, b>4
但不是
... 其中 a=2,c>5
这是因为数据存储在分区中,按分区键(pk 的第一个键)索引,然后按每个连续的聚簇键排序。
如果你有确切的值,你可以添加一个二级索引到 val 4 然后做
... and val4=34
但仅此而已。即便如此,您还是希望在应用索引之前访问一个分区。否则你会得到一个可能超时的集群范围的查询。
由于 cassandra 存储数据以进行快速插入和检索的方式,存在查询限制。一个分区中的所有数据都放在一起,所以在分区客户端内部查询通常不是问题,除非你有非常大的宽行(在这种情况下,也许应该检查模式)。
希望对您有所帮助。