表:
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()
?
我想检索相对范围只能是日期或带时间的日期,而不是数据库中存在的特定时间戳。
我猜您对 Cassandra 术语有点困惑。
请参考这里
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'