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 句を使用して少なくとも 1 つの値を指定する必要があります。つまり、単に範囲を指定することはできません。これを行う簡単な方法は、既知の値を表す番兵列を作成することです。たとえば、現在の月または年を表す列を作成し、それを等号として使用できます。クエリ時に知ることができる任意の値でうまくいきます。

于 2013-02-26T22:11:22.803 に答える