使用Cassandra的查询范围日期

时间:2013-02-26 18:15:21

标签: nosql cassandra

我尝试使用此架构执行查询范围日期:

create column family fact_ingreso with comparator = UTF8Type and
key_validation_class=UTF8Type and 
column_metadata =
[{column_name: ing_fecing, validation_class: DateType,index_type:KEYS}];

我以这种方式插入数据

// Date format: "2010-04-01 00:00:00"
// The datos[20] has a date as a String in the above format
SimpleDateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date fecha = formatoFecha.parse(datos[20]);
System.out.println(fecha);
Column ing_fecing = new Column(toByteBuffer("ing_fecing"));
ing_fecing.setValue(ByteBufferUtil.bytes(fecha.getTime()));
ing_fecing.setTimestamp(timestamp);
client.insert(toByteBuffer(id_row), parent, ing_fecing, ConsistencyLevel.ONE);

到目前为止一切顺利,但当我尝试使用以下代码执行查询范围日期时:

get fact_ingreso where ing_fecing>2011-01-12;

我收到错误“索引子句中没有索引列与运算符EQ”

但如果我更换运算符“>”对于“=”它起作用:

get fact_ingreso where ing_fecing=2011-01-12;

输出

RowKey: 645
=> (column=ing_fecing, value=2011-01-12 00:00:00-0300, timestamp=1361899176638)

我是Cassandra数据库的新手,我真的需要为我的论文工作部署这个功能。 如果有人能帮助我,我真的很感激。

编辑:Cassandra版本是1.2 此致

1 个答案:

答案 0 :(得分:0)

使用Cassandra,您必须至少使用equals子句指定一个值;即你不能只指定一个范围。一种简单的方法是编写一个表示已知值的标记列。例如,您可以编写一个代表当前月份或年份的列,然后将其用作您的等号。您在查询时可以知道的任何值都可以解决问题。