带有排序查询建模的Cassandra过滤器

时间:2018-03-01 12:29:30

标签: scala cassandra

我是Cassandra的新手,我正在尝试在卡桑德拉模拟一张桌子。我的查询如下所示

Query #1: select * from TableA where Id = "123"
Query #2: select * from TableA where name="test" orderby startTime DESC
Query #3: select * from TableA where state="running" orderby startTime DESC

我已经能够为查询#1构建一个类似于

的表
    val tableAStatement = SchemaBuilder.createTable("tableA").ifNotExists.
    addPartitionKey(Id, DataType.uuid).
    addColumn(Name, DataType.text).
    addColumn(StartTime, DataType.timestamp).
    addColumn(EndTime, DataType.timestamp).
    addColumn(State, DataType.text)

    session.execute(tableAStatement)

但是对于查询#2和3,我尝试过很多不同的东西,但都失败了。每次,我都会遇到与cassandra不同的错误。

考虑到上述查询,什么是正确的表模型?什么是对此类查询进行建模的正确方法。

1 个答案:

答案 0 :(得分:0)

查询#2:从TableB中选择*,其中name =“test”

CREATE TABLE TableB (
    name text,
    start_time timestamp,
    PRIMARY KEY (text, start_time)
) WITH CLUSTERING ORDER BY (start_time DESC)

查询#3:从TableC中选择*其中state =“running”

CREATE TABLE TableC (
    state text,
    start_time timestamp,
    PRIMARY KEY (state, start_time)
) WITH CLUSTERING ORDER BY (start_time DESC)

在cassandra中,您可以围绕查询对表进行建模。需要数据非规范化和复制。注意聚类顺序 - 这样您可以在查询中省略“ordered by”