首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集群列上的Cassandra(Amazon )查询错误

集群列上的Cassandra(Amazon )查询错误
EN

Stack Overflow用户
提问于 2022-08-01 10:09:20
回答 2查看 52关注 0票数 1

我正在尝试对amazon上的集群列执行查询,因为我不想在我的原生查询中使用允许过滤,所以我创建了4-5个集群列,以提高性能。

但是,在尝试使用>=和<=对两个集群列进行过滤时,我收到以下消息时出错了

message=“群集列”"start_date“不能被限制(前面的列"segment_id”受非情商关系的限制)“

我也尝试过使用多列查询,但我不支持错误message="MultiColumn关系还不支持“

查询引用

从table_name中选择*,其中shard_id = 568,customer_id = '10‘和customer_id= 568113,(segment_id,start_date,end_date)>= (-1,'2022-05-16','2017-03-28')和标志= 1;

从table_name中选择*,其中shard_id =5 68,customer_id = '10‘,customer_id= 568113,segment_id > -1,start_date =’2022-05-16‘;

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-01 12:04:33

我假设您的表具有以下主键:

代码语言:javascript
复制
CREATE TABLE table_name (
    ...
    PRIMARY KEY(shard_id, division, customer_id, segment_id, start_date, end_date)
)

在任何情况下,CQL查询都是无效的,因为您只能在查询中的最后一列上应用不等式运算符。例如,这些是基于表架构的有效查询:

代码语言:javascript
复制
SELECT * FROM table_name
    WHERE shard_id = ? AND division = ?
    AND customer_id <= ?

SELECT SELECT * FROM table_name \
    WHERE shard_id = ? AND division = ? \
    AND customer_id = ? AND segment_id > ?

SELECT SELECT * FROM table_name \
    WHERE shard_id = ? AND division = ? \
    AND customer_id = ? AND segment_id = ? AND start_date >= ?

除查询中的最后一个群集列外,前面的所有列都必须由相等运算符筛选。

如果查询需要复杂的谓词,则需要使用Elasticsearch或Apache等工具对Cassandra数据进行索引。它们将允许您运行复杂的搜索参数从数据库中检索数据。干杯!

票数 2
EN

Stack Overflow用户

发布于 2022-11-17 21:27:20

允许过滤有时会受到不好的惩罚。这完全取决于你扫描了多少行。了解每个分区将扫描多少行并从那里向后工作是很好的。只有最后一列才能包含绑定范围的不平等语句。尝试命令您的列先删除大多数列,这样可以减少“筛选”的行数。

在下面的示例中,我们使用索引键开始日期,并在end_data、segment_id和标志上进行筛选。

代码语言:javascript
复制
select * from table_name where shard_id = 568 and division = '10' and customer_id = 568113 and start_date >= '2022-05-16' and end_date > '2017-03-28') and (segment_id > -1 flag = 1;```
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73192124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档