如何解决如何在 cassandra 的 materlized 视图表中使用 less <= 和 >=
我的 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);
这是我的查询,但当我使用此查询 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"
时出现此错误 select * from mv_test where creation_ts > 1606761000 AND creation_ts < 1609353000
;
解决方法
这是 Cassandra 的正确行为,因为您的查询仅受 creation_ts
上的条件限制,即集群列。而且由于您对 id
字段没有限制,Cassandra 不知道分区键,并且为了满足条件,它需要遍历所有数据并应用过滤器。默认情况下,Cassandra 不允许在没有 ALLOW FILTERING
的情况下进行此类行为 - 就像您在“正常”表上具有此类条件一样。
如果你想在你的系统中执行这样的查询,你需要改变方法:
- 更改数据模型,数据将按日期/时间戳的一部分进行分区,然后您需要发出多个查询以覆盖所有必要的时间范围
- 使用 Spark 或自定义代码来正确扫描所有数据。但这不会很快,因为您需要处理大量数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。