表:
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)"
它不适用于>或者它适用于任何范围选择=就索引而言它只有一个主键没有分区键。为什么它要求token()。
我想检索相对范围只能是日期或日期,而不是特定时间戳存在于db中。
答案 0 :(得分:15)
我猜你对Cassandra术语有点困惑。
请参阅here
partition key: The first column declared in the PRIMARY KEY definition
即,当你创建一个像这样的表
CREATE TABLE table {
key1,
key2,
key3,
PRIMARY KEY (key1, key2, key3)
}
key1
称为分区键,key2
,key3
称为群集键。
在您的情况下,您没有群集密钥,因此您声明的单个主键成为分区键。
还应对群集密钥执行范围查询(<,>)。
如果您没有任何其他主键候选人,我认为您应该像这样改造您的表
CREATE TABLE TEST_PAYLOAD
(
BUCKET varchar,
TIME_STAMP timestamp,
TYPE text,
PRIMARY KEY (BUCKET, TIME_STAMP)
);
对于BUCKET,您可以提供年份或年份和月份组合。因此,您的密钥将如2013年,2014年,06-2014,10-2014等。
因此,当查询转到所需的存储桶并进行范围扫描时,例如TIME_STAMP> ='2013-05-15 00:00:00-0700'