如何在Cassandra中的查询中同时使用ORDER BY和IN?

如何在Cassandra中的查询中同时使用ORDER BY和IN?,cassandra,Cassandra,我使用卡桑德拉3.0.5 我在一起使用按和排序时遇到问题 模式: CREATE TABLE my_status.user_status_updates ( username text, id timeuuid, body text, PRIMARY KEY (username, id)) WITH CLUSTERING ORDER BY (id ASC) AND bloom_filter_fp_chance = 0.01 AND cach

我使用卡桑德拉3.0.5

我在一起使用
排序时遇到问题

模式:

CREATE TABLE my_status.user_status_updates (
    username text,
    id timeuuid,
    body text,
    PRIMARY KEY (username, id)) 
    WITH CLUSTERING ORDER BY (id ASC)
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';
查询:

SELECT username, id, UNIXTIMESTAMPOF(id), body
FROM user_status_updates
WHERE username IN ('carol', 'dave')
ORDER BY id DESC
LIMIT 2;
InvalidRequest:code=2200[Invalid query]message=“无法在分区键上同时使用ORDER BY和IN限制对查询进行分页;您必须删除ORDER BY或IN and sort客户端,或禁用此查询的分页”


我相信我见过有人质疑这一点没有错误,所以我知道有一种方法可以解决这个问题。要使此查询正常工作,我需要做些什么?或者同时查询
ORDER BY
IN
是否效率低下?

您已将群集键设置为ORDER ASC,但正在查询中请求它be ORDER DESC。这些意见相左,适得其反。如果将集群键更改为DESC,则查询中不需要orderby子句。如果对于其他查询,确实需要将集群键设为ASC,那么我建议使用第二个表,该表为DESC。根据查询所需内容设计表。希望有帮助


Adam同时使用IN和ORDER BY将需要使用cqlsh中的
paging off
命令关闭分页。
cqlsh>PAGING OFF
就是答案。

模式是什么样子的?因为您只要求返回2行,所以删除查询中的
ORDER BY
子句,并在客户端进行排序,似乎是一个快速的解决方法。将此问题与“Learning Apache Cassandra Second Edition”一书中的确切查询联系起来。书中没有提到任何错误或必须关闭分页。我已经将这个问题提交给了关于packt publishing的勘误表。每次我用Java创建会话时,分页都是打开的。那么,有没有一种方法可以永久取消寻呼?对不起,我不知道怎么做。我最终决定不使用此方法。@user2782405在java中创建集群对象时,将QueryOptions设置为Cluster.builder().setQueryOptions(new QueryOptions().setFetchSize(500));谢谢@rishikesanvaradharajan请查看在同一查询中同时使用IN和ORDER BY时为什么需要关闭分页。