【问题标题】:how to use in and order by at the same time in cassandra如何在cassandra中同时使用和订购
【发布时间】:2019-01-16 09:24:22
【问题描述】:

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

可以使用“SELECT * FROM users WHERE userID IN (102,104) ORDER BY age ASC;”

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

PAGING OFF 是必须的吗?

这是我目前的看法:

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 并对客户端进行排序,或者禁用此查询的分页"

谢谢

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

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

    另外,如果你检查code,你也会得到更多的解释。

    检查是在JIRA-6722中添加的,对行为的解释是:

    然而在实践中并不是那么容易。如果查询整页 每个分区和IN中有很多分区,你会加载 内存中的大量数据,在很大程度上破坏了分页的目标。 如果您改为查询小于每个分区的页面大小,您 现在可能需要重新查询一些分区,具体取决于 在第一页上合并排序产生。

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

    【讨论】:

      猜你喜欢
      • 2018-12-03
      • 2021-04-05
      • 2012-08-18
      • 1970-01-01
      • 2021-10-03
      • 2021-09-02
      • 2012-09-18
      • 1970-01-01
      • 2011-08-03
      相关资源
      最近更新 更多