我试图在cassandra表上查询一个整数并得到错误 Only EQ and IN relation are supported on the partition key(unless you use the token()function)
我的表是在下面的查询中设置的。请注意,我没有设置表,当前也无法更改它。
CREATE TABLE USERS(
accName text,
accContext text,
accNumber int,
accCount int,
accHost text,
PRIMARY KEY (accName,accContext,accNumber)
);
SELECT * FROM Users WHERE accName = 'tear' and accContext = 'db1'
and accNumber> 20200101 and accNumber<= 202002018;
1条答案
按热度按时间j0pj023g1#
它看起来像是您的编辑后查询:
…工作正常。如果您指定
accName
(分区键)和accContext
(第一个聚类键),您完全可以对整数运行范围查询,假设它是下一个聚类键。但是,如果你要消除accContext
从您的查询来看,这将失败,因为您没有为cassandra提供足够的信息来有效地检索所需的数据。因此,这是您在使用有效解决方案编辑之前的查询。当然,您也看到了这样一个错误,即分区键上的范围查询只适用于
token
功能。为什么?
您可能听说过cassandra需要一种“基于查询”的数据建模方法。这是因为所有数据通常不驻留在单个节点上。跨节点查询非常昂贵。通过强制分区键上的范围查询
token
提供用于将查询限制到负责特定令牌范围的节点的工具。在您的情况下,这是有效的:通过使用
token
函数中,我可以看到字符串“tear”的标记是什么。接下来,我可以查询system.peers
查看哪个节点负责该令牌,以及了解目标节点负责的确切令牌范围。