0

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

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 问候

4

1 回答 1

0

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

于 2013-02-26T22:11:22.803 回答