读DataStax blog,我在测试片查询,即使博客已经与卡桑德拉2完成,我们在3卡桑德拉切片查询非常奇怪的结果
所以我定义了一个测试表作为波纹管。
CREATE TABLE foo(
part_key TEXT,
start_ts INT,
end_ts INT,
PRIMARY KEY(part_key, start_ts, end_ts)
) WITH CLUSTERING ORDER BY (start_ts ASC, end_ts ASC);
此表中插入了一些固定装置。
INSERT INTO foo(part_key, start_ts, end_ts) VALUES ('A', 1, 5);
INSERT INTO foo(part_key, start_ts, end_ts) VALUES ('A', 2, 3);
INSERT INTO foo(part_key, start_ts, end_ts) VALUES ('B', 4, 7);
INSERT INTO foo(part_key, start_ts, end_ts) VALUES ('B', 9, 13);
INSERT INTO foo(part_key, start_ts, end_ts) VALUES ('B', 1, 2);
INSERT INTO foo(part_key, start_ts, end_ts)
VALUES ('B', 9, 9999); -- 9999 = symbolic value for no end
我检查B
分区第一:
> SELECT * FROM foo WHERE part_key='B';
part_key | start_ts | end_ts
----------+----------+--------
B | 1 | 2
B | 4 | 7
B | 9 | 13
B | 9 | 9999
(4 rows)
我们不能执行“自然”查询SELECT * FROM foo WHERE part_key='B' AND start_ts <= 7 AND end_ts >= 7
,因为它会引发以下错误。
InvalidRequest: Error from server: code=2200 [Invalid query] message="Clustering column "end_ts" cannot be restricted (preceding column "start_ts" is restricted by a non-EQ relation)"
在DataStax博客中有一个查询如下。
SELECT * FROM numberOfRequests
WHERE cluster = ‘cluster1’
AND date = ‘2015-06-05’
AND datacenter = 'US_WEST_COAST'
AND (hour, minute) >= (12, 30) AND (hour) < (14)
所以我们尝试这种解决方法有以下切片查询,使用start_ts >= -9999
一如既往真实,允许为end_ts
指定不平等状况在一起。
SELECT * FROM foo WHERE part_key='B'
AND (start_ts, end_ts) >= (-9999, 7) AND start_ts <= 7; -- -9999 = min_value
它的执行没有任何警告,并给出了结果波纹管。
part_key | start_ts | end_ts
----------+----------+--------
B | 1 | 2
B | 4 | 7
(2 rows)
在这一点上,该行#1(与start_ts = 1
)不应该在那里,我作为end_ts >= 7
不是此行如此。由于start_ts >= -9999
总是如此,所以第一个条件(start_ts, end_ts) >= (-9999, 7)
似乎被忽略:结果与查询SELECT * FROM foo WHERE part_key='B' AND start_ts <= 7
相同。
阅读博客的例子,我在想,(至少C2.2),(start_ts, end_ts) >= (-9999, 7) AND start_ts <= 7
将意味着start_ts >= -9999 AND end_ts >= 7 AND start_ts <= 7
,以相若方式(start_ts, end_ts) = (4, 7)
这意味着start_ts = 4 AND end_ts = 7
为波纹管。
SELECT * FROM foo WHERE part_key='B' AND (start_ts, end_ts) = (4, 7);
part_key | start_ts | end_ts
----------+----------+--------
B | 4 | 7
(1 rows)
这样的元组不等式如何被真正解释? 有什么方法可以更新它,使其“工作”?
https:// stackoverflow。com/questions/32646751/cassandra-can not-restrict-2-columns-using-clustering-keyversion-2-1-9 –
这并没有真正回答,或者至少表明Cassandra的结果不一致。 – cchantep