這是我用來創建表的代碼:卡桑德拉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