我想获取值,其WRITETIME值比特定时间新。我尝试了此查询,但失败:
SELECT zoom,idx FROM tiles
WHERE zoom=5 AND writetime(tile) > maxTimeuuid('2015-01-01 00:05+0000')
ALLOW FILTERING;
字符串
我得到这个错误:
SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query]
message="line 1:68 no viable alternative at input '(' (...and idx > 0
and [writetime](...)">
型
对于此表:
CREATE TABLE tiles (
zoom int,
idx int,
tile blob,
PRIMARY KEY (zoom, idx)
) WITH COMPACT STORAGE
型
1条答案
按热度按时间dgsult0t1#
WRITETIME
是一个用于显示特定列被写入时间的函数。它不是PRIMARY KEY的一部分,也不是索引,所以不能在WHERE子句中使用。为了能够在特定 * 行 *(而不是列)被写入时进行查询,您应该将其作为附加列添加到表中,并将作为第一个聚类键:字符串
现在这个查询将工作:
型
备注:
ALLOW FILTERING
指令。基本上,这告诉Cassandra可以从所有节点拉取表的所有行,然后应用过滤器。COMPACT STORAGE
。这是专门为人们将新的CQL3表转换为传统的Thrift引擎存储格式而设计的。如果你没有专门做这件事,那么你不应该使用它。lastwritten
对tiles
表进行排序。通常,基于时间序列的应用程序关心的是获取最新的数据,因此这通常是有意义的。如果您不是这种情况,那么(默认)递增顺序应该可以。idx
作为最后一个聚类键,主要是为了唯一性。如果你发现自己必须为该列构建查询,你可能需要一个不同的查询表(重新排列主键)来支持它。要获得这方面的更多帮助,请阅读给予帕特里克麦克法丁的Getting Started With Timeseries Data Modeling。