【问题标题】:Select query in CQL issue在 CQL 问题中选择查询
【发布时间】:2026-01-11 01:00:02
【问题描述】:

我正在尝试获取 cassandra DB 中表的计数,我正在运行以下查询:

select count(*) 
from bssapi.call_detail_records 
WHERE 
year = 2020 
and month = 3
and event_at > '2020-03-01 07:45:51+0000' ALLOW FILTERING;

我得到的错误是:

InvalidRequest: code=2200 [Invalid query] message="Partitioning column "year" cannot be restricted because the preceding column ("ColumnDefinition{name=subscription_id, type=org.apache.cassandra.db.marshal.UTF8Type, kind=PARTITION_KEY, componentIndex=0, indexName=null, indexType=null}") is either not restricted or is restricted by a non-EQ relation"

当我通过添加订阅 ID 过滤查询时,系统会正确返回计数,仅当我对所有表运行计数时才会出现此问题。

【问题讨论】:

  • 你能分享你的这个表的架构吗?

标签: cassandra cql cqlsh


【解决方案1】:

我得到了这个问题的解决方案,我使用了下面的查询:

select COUNT(*) from bssapi.call_detail_records WHERE event_at > '2020-03-22 07:45:51+0000' ALLOW FILTERING;

【讨论】:

  • 如果您使用ALLOW FILTERING - 这是您做错了什么的第一个迹象,您需要更改数据模型,或使用其他工具,例如 Spark。否则,一旦数据量增加,您就会开始遇到问题......
  • @AlexOtt 的评论获得的赞成票多于答案,这一事实表明 Alex 在这里可能是正确的。