如何在cassandra中同时使用和订购

时间:2018-08-09 02:43:50

标签: cassandra cql

我看到了官方文档:https://docs.datastax.com/en/cql/3.1/cql/cql_using/useColumnsSort.html

可以使用“ SELECT * FROM user,其中userID输入(102,104)按年龄ASC排序;”

如何定义用户表或实例化视图?

必须放弃吗?

这是我当前的视图:

CREATE MATERIALIZED VIEW navigation_by_id_time AS
       SELECT * FROM navigation
       WHERE competition_id IS NOT NULL AND event_type_id IS NOT NULL AND event_id IS NOT NULL AND market_id IS NOT NULL AND market_start_time IS NOT NULL AND market_suspend_time IS NOT NULL
       PRIMARY KEY (event_type_id, market_start_time, event_id, market_id, market_suspend_time);

此查询无效

select * from navigation_by_id_time where event_type_id in(1,2,3) order by market_start_time;

message =“不能对分区键上有ORDER BY和IN限制的页面进行分页;您必须删除ORDER BY或IN并对客户端进行排序,或者禁用此查询的分页”

谢谢

1 个答案:

答案 0 :(得分:1)

使用bth IN和ORDER BY时,Cassandra不支持分页。在datastax文档-Retrieval using IN keyword中也有说明。

此外,如果您检查code,还将获得更多说明。

该检查已添加到JIRA-6722中,其行为说明如下:

  

然而,在实践中并不是那么容易。如果查询整页   每个分区中的一个,并且IN中有很多分区,您将加载   大量的数据存储,在很大程度上击败了分页的目标。   如果查询少于每个分区的页面大小,则表示   现在可能需要重新查询某些分区,具体取决于   在第一页上合并排序结果。

结论是:您需要在cqlsh中关闭paging。如果您使用的是Java客户端,this可能会有所帮助(还介绍了更多内容)。

相关问题