【问题标题】:How to use less <= and >= in materlized view table in cassandra如何在 cassandra 的物化视图表中使用 less <= 和 >=
【发布时间】:2021-04-04 13:33:41
【问题描述】:

我的 CQL 查询

CREATE MATERIALIZED VIEW mv_test AS 
SELECT *  FROM host_accounts WHERE id IS NOT NULL AND creation_ts IS NOT NULL 
PRIMARY KEY (id, creation_ts) WITH clustering ORDER BY (creation_ts DESC);

这是我的查询,但当我使用此查询select * from mv_test where creation_ts &gt; 1606761000 AND creation_ts &lt; 1609353000 时,它给出了此错误InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING";

【问题讨论】:

    标签: java database spring-boot cassandra cql


    【解决方案1】:

    这是 Cassandra 的正确行为,因为您的查询仅受 creation_ts 上的条件限制,即集群列。而且由于您对id 字段没有限制,Cassandra 不知道分区键,并且要满足条件,它需要遍历所有数据并应用过滤器。默认情况下,Cassandra 不允许在没有 ALLOW FILTERING 的情况下进行此类行为 - 就像您在“正常”表中存在此类情况一样。

    如果你想在你的系统中执行这样的查询,你需要改变方法:

    • 更改数据模型,数据将按日期/部分时间戳进行分区,然后您需要发出多个查询以覆盖所有必要的时间范围
    • 使用将正确扫描所有数据的 Spark 或自定义代码。但这不会很快,因为您需要处理大量数据。

    【讨论】:

    猜你喜欢
    • 2017-11-23
    • 2019-03-03
    • 2016-11-03
    • 1970-01-01
    • 2020-09-17
    • 2016-05-08
    • 2018-07-04
    • 2023-03-26
    相关资源
    最近更新 更多