这是我用来创建表的代码:卡桑德拉CQL替代或WHERE子句
CREATE TABLE test.packages (
packageuuid timeuuid,
ruserid text,
suserid text,
timestamp int,
PRIMARY KEY (ruserid, suserid, packageuuid, timestamp)
);
,然后创建一个物化视图:
CREATE MATERIALIZED VIEW test.packages_by_userid
AS SELECT * FROM test.packages
WHERE ruserid IS NOT NULL
AND suserid IS NOT NULL
AND TIMESTAMP IS NOT NULL
AND packageuuid IS NOT NULL
PRIMARY KEY (ruserid, suserid, timestamp, packageuuid)
WITH CLUSTERING ORDER BY (packageuuid DESC);
我希望能够搜索对于两个ID
之间发送的数据包,所以我需要这样的:
SELECT * FROM test.packages_by_userid WHERE (ruserid = '1' AND suserid = '2' AND suserid = '1' AND ruserid = '2') AND timestamp > 1496601553;
我该如何用CQL完成这样的事情?
我已经搜索了一下,但我无法弄清楚。
我愿意改变表的结构,如果它会使这样的事情成为可能。
如果没有物化视图也是可行的,那也不错。
再次感谢! in子句总是包含两个用户ID,所以希望我没有减速问题。 –
这很好,那么你可以毫无疑问地使用子句解决方案。 –
我从来没有见过CQL语法* ruserid IN('1','2')和suserid IN('1','2')*带有双* IN *子句。其中Cassandra版本的语法是否有效?你的意思是*(ruserid,suserid)IN(('1','2'),('1','2'))*? – xmas79