Java Cassandra:分区键上只支持EQ和IN-relation(除非使用token()函数)
表: 它不适用于>或任何范围选择,而适用于=就索引而言,它只有一个主键,没有分区键。为什么它要求令牌()Java Cassandra:分区键上只支持EQ和IN-relation(除非使用token()函数),java,sql,cassandra,nosql,Java,Sql,Cassandra,Nosql,表: 它不适用于>或任何范围选择,而适用于=就索引而言,它只有一个主键,没有分区键。为什么它要求令牌() 我想检索相对范围,可以是日期,也可以是数据库中不存在特定时间戳的日期。我想您可能对Cassandra术语有点困惑 请参阅 分区键:主键定义中声明的第一列 也就是说,当你创建这样一个表时 CREATE TABLE TEST_PAYLOAD ( TIME_STAMP timestamp, TYPE text, PRIMARY KEY (TIME_STAMP) ); time_st
我想检索相对范围,可以是日期,也可以是数据库中不存在特定时间戳的日期。我想您可能对Cassandra术语有点困惑 请参阅
分区键:主键定义中声明的第一列
也就是说,当你创建这样一个表时
CREATE TABLE TEST_PAYLOAD
(
TIME_STAMP timestamp,
TYPE text,
PRIMARY KEY (TIME_STAMP)
);
time_stamp | type
--------------------------+----------
2013-05-15 00:00:00-0700 | sometext
2013-05-16 00:00:00-0700 | sometext
2013-05-17 00:00:00-0700 | sometext
SELECT * FROM TEST_PAYLOAD WHERE TIME_STAMP>='2013-05-15 00:00:00-0700';
code=2200 [Invalid query] message="Only EQ and IN relation are supported on the partition key (unless you use the token() function)"
CREATE TABLE table {
key1,
key2,
key3,
PRIMARY KEY (key1, key2, key3)
}
key1
称为分区键和key2
,key3
称为集群键
在您的情况下,您没有集群键,因此您声明的单个主键成为分区键
还应在集群键上执行范围查询(<,>)
如果主键没有任何其他候选项,我认为应该像这样重新构建表
CREATE TABLE TEST_PAYLOAD
(
TIME_STAMP timestamp,
TYPE text,
PRIMARY KEY (TIME_STAMP)
);
time_stamp | type
--------------------------+----------
2013-05-15 00:00:00-0700 | sometext
2013-05-16 00:00:00-0700 | sometext
2013-05-17 00:00:00-0700 | sometext
SELECT * FROM TEST_PAYLOAD WHERE TIME_STAMP>='2013-05-15 00:00:00-0700';
code=2200 [Invalid query] message="Only EQ and IN relation are supported on the partition key (unless you use the token() function)"
CREATE TABLE table {
key1,
key2,
key3,
PRIMARY KEY (key1, key2, key3)
}
对于BUCKET,您可以提供年或年和月组合。所以你的钥匙看起来像2013、2014、06-2014、10-2014等等
因此,在查询go to the desired bucket and do range scans(如TIME_STAMP>='2013-05-15 00:00:00-0700'BTW)时,我能够得到部分结果,即数据库中特定的数据不是相对范围,但仍在查找分区键错误的原因。下面的查询解决了我的范围问题。从测试有效负载中选择*TOKEN(时间戳)>=TOKEN('2013-05-15 00:00:00-0700')和TOKEN(时间戳),您完全正确@John,非常感谢!!刚才我明白了,作为卡桑德拉的新手,我有点困惑。