我可以对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"
wpx232ag1#
你能为我推荐Cassandra的in接线员吗?记住,仍然可以使用 IN 分区键上的运算符。它不会说这是推荐的,但它应该是一个小数目的参数罚款。但首先,您必须重建表,或者构建一个新表来支持该查询。因为我不知道确切的表定义,所以我要做一些假设(比如 _id ).如果您重新创建的表与此类似:
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不能保证两个分区上的数据在同一个节点上,因此它实际上选择了一个协调器,并在后台运行两个查询。对于两个参数来说,可能还不算太糟。但我会尽量保持个位数。
1条答案
按热度按时间wpx232ag1#
你能为我推荐Cassandra的in接线员吗?
记住,仍然可以使用
IN
分区键上的运算符。它不会说这是推荐的,但它应该是一个小数目的参数罚款。但首先,您必须重建表,或者构建一个新表来支持该查询。因为我不知道确切的表定义,所以我要做一些假设(比如
_id
).如果您重新创建的表与此类似:
现在写一些数据到它,然后这个工作:
笔记:
我假设一个当前的,单一的主键
_id
. 本质上,我创建了一个集群键,以确保现在按域划分的底层行仍然是唯一的。在您的例子中,取任何键列在 `` 表,并将其用作集群键来完成相同的任务。根据我上面的警告,这被称为“多键查询”,这在cassandra中是一种反模式。问题是,cassandra不能保证两个分区上的数据在同一个节点上,因此它实际上选择了一个协调器,并在后台运行两个查询。对于两个参数来说,可能还不算太糟。但我会尽量保持个位数。