我有这张表:
CREATE TABLE custumer_events_service.events_by_websiteId_time(
"event_id" text,
"currentTime" timestamp,
"websiteId" varchar,
OTHER COLUMNS ...
PRIMARY KEY(event_id, websiteId, currentTime)
)
在这种情况下,当我执行此查询时,我会得到按 currenttime
排序的 10000 行吗:
SELECT * FROM events_by_websiteid_time WHERE websiteid='xxxx' LIMIT 10000 ALLOW FILTERING;
还是我必须在末尾添加 WITH CLUSTERING ORDER BY (currentTime DESC);
?
最佳答案
Cassandra 只能在分区内执行排序顺序。当你使用 ALLOW FILTERING
为避免必须提供您的分区键 ( event_id
),您的结果集将按每个 event_id
的散列标记值排序。 ,然后通过 websiteid
和 currentTime
.
让您的结果按 currentTime
排序,您需要创建一个新的查询表或更改现有表的 PRIMARY KEY 定义(可能还有 CLUSTERING ORDER)。如果您决定创建一个新的查询表,它必须看起来像这样:
CREATE TABLE custumer_events_service.events_by_websiteId_time_eventid(
event_id text,
currentTime timestamp,
websiteId varchar,
OTHER COLUMNS ...
PRIMARY KEY (websiteid,currentTime,event_id))
WITH CLUSTERING ORDER BY (currentTime DESC, event_id ASC);
这将允许这个查询:
SELECT * FROM events_by_websiteid_time_eventid WHERE websiteid='xxxx' LIMIT 10000;
...按照您的预期工作。
关于database - Cassandra 顺序和聚类键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35729937/