作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们将Cassandra用作我们的车队管理解决方案的数据历史学家。我们在Cassandra中有一个表格,其中存储了车辆行驶的详细信息。表结构如下
CREATE TABLE journeydetails(
bucketid text,
vehicleid text,
starttime timestamp,
stoptime timestamp,
travelduration bigint,
PRIMARY KEY (bucketid,vehicleid,starttime,travelduration)
);
select * from journeydetails where bucketid in('2015-12') and vehicleid in('1234567')
and starttime > '2015-12-1 00:00:00' and starttime < '2015-12-3 23:59:59'
and travelduration > 1800000;
InvalidRequest: code=2200 [Invalid query] message="Clustering column "travelduration"
cannot be restricted (preceding column "starttime" is restricted by a non-EQ relation)
最佳答案
select * from journeydetails where bucketid in('2015-12') and vehicleid in('1234567')
and starttime > '2015-12-1 00:00:00' and starttime < '2015-12-3 23:59:59'
and travelduration > 1800000;
bucketid
分区,然后在磁盘上按
vehicleid
,
starttime
和
travelduration
排序。因为您已经在
starttime
上执行范围查询(非EQ关系),所以您不能限制后面的键。这是因为
travelduration
限制可能会使您的范围条件中的某些行失去资格。这将导致效率低下,不连续的读取。 Cassandra旨在保护您免于编写可能具有不可预测性能的查询(例如此查询)。
travelduration
之前(具有等号关系),则可以应用大于条件:
select * from journeydetails where bucketid='2015-12' and vehicleid='1234567'
and starttime='2015-12-1 00:00:00' and travelduration > 1800000;
starttime
可能不是很有用。
travelduration
,然后您的原始查询将起作用。
select * from journeydetails where bucketid='2015-12' and vehicleid='1234567'
and starttime > '2015-12-1 00:00:00' and starttime < '2015-12-3 23:59:59';
IN
。使用
IN
进行查询与使用二级索引相似,因为Cassandra必须与多个节点通信才能满足您的查询。用单个项目调用它可能没什么大不了的。但是
IN
是那些古老的RDBMS习惯之一,您应该在深入研究Cassandra之前就应该打破它们。
关于cassandra - Cassandra错误-无法限制“聚类”列(之前的列受非EQ关系限制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34422515/
我是一名优秀的程序员,十分优秀!