in算子

ncecgwcz  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(388)

我可以对cassandra中的非主键属性使用in操作符吗?或者其他方法来替代而不是在查询中使用?

SELECT * FROM abc WHERE domain IN ('domain1','domain2') allow filtering;

 Error from server: code=2200 [Invalid query] message="IN predicates on non-primary-key columns (domain) is not yet supported"
wpx232ag

wpx232ag1#

你能为我推荐Cassandra的in接线员吗?
记住,仍然可以使用 IN 分区键上的运算符。它不会说这是推荐的,但它应该是一个小数目的参数罚款。但首先,您必须重建表,或者构建一个新表来支持该查询。
因为我不知道确切的表定义,所以我要做一些假设(比如 _id ).
如果您重新创建的表与此类似:

CREATE TABLE abc_by_domain (
  domain TEXT,
  abc_id TEXT,
  value TEXT,
  PRIMARY KEY (domain,abc_id));

现在写一些数据到它,然后这个工作:

SELECT * FROM abc_by_domain  WHERE domain IN ('domain1','domain2');

 domain  | abc_id | value
---------+--------+---------
 domain1 |      1 | 1st row
 domain2 |      2 | 2nd row

(2 rows)

笔记:
我假设一个当前的,单一的主键 _id . 本质上,我创建了一个集群键,以确保现在按域划分的底层行仍然是唯一的。在您的例子中,取任何键列在 `` 表,并将其用作集群键来完成相同的任务。
根据我上面的警告,这被称为“多键查询”,这在cassandra中是一种反模式。问题是,cassandra不能保证两个分区上的数据在同一个节点上,因此它实际上选择了一个协调器,并在后台运行两个查询。对于两个参数来说,可能还不算太糟。但我会尽量保持个位数。

相关问题