我需要创建一个包含4列的表:
我有3个必需的查询:
SELECT *
FROM table
WHERE timestamp > xxx
AND timestamp < xxx;
SELECT *
FROM table
WHERE name = 'xxx';
SELECT *
FROM table
WHERE name = 'xxx'
AND timestamp > xxx
AND timestamp < xxx;
结果需要按时间戳排序 当我使用时:
CREATE TABLE table (
timestamp BIGINT,
name VARCHAR,
value VARCHAR,
value2 VARCHAR,
PRIMARY KEY (timestamp)
);
结果永远不会排序 当我使用时:
CREATE TABLE table (
timestamp BIGINT,
name VARCHAR,
value VARCHAR,
value2 VARCHAR,
PRIMARY KEY (name, timestamp)
);
结果按名称&gt;排序时间戳错了。
name | timestamp
------------------------
a | 20170804142825729
a | 20170804142655569
a | 20170804142650546
a | 20170804142645516
a | 20170804142640515
a | 20170804142620454
b | 20170804143446311
b | 20170804143431287
b | 20170804143421277
b | 20170804142920802
b | 20170804142910787
如何使用Cassandra执行此操作?
答案 0 :(得分:1)
Cassandra通过按键分组密钥组来订购数据
在您的情况下,第一个表只有分区键timestamp
,没有群集密钥。所以数据不会被排序。
对于第二个表,分区键为name
,群集键为timestamp
。因此,您的数据将按timestamp
分组name
。意味着数据将首先按其name
分组,然后每个组将按timestamp
分别排序。
<强>被修改强>
所以你需要添加如下的分区键:
CREATE TABLE table (
year BIGINT,
month BIGINT,
timestamp BIGINT,
name VARCHAR,
value VARCHAR,
value2 VARCHAR,
PRIMARY KEY ((year, month), timestamp)
);
此处(year, month)
是复合分区键。您必须从时间戳中插入年份和月份。因此,您的数据将在一年内按timestamp
排序