我对 Cassandra 非常陌生,并在一些简单的用例中尝试使用 Astyanax/CQL3。我正在尝试从 Groovy 应用程序的 Cassandra 版本 1.2 上使用 Astyanax 和 CQL3 从简单表中检索数据。
我有以下列族(表):
CREATE TABLE t_index_credential (
id varchar,
versions map<timestamp,varchar>,
PRIMARY KEY (id)
);
表中存在以下行:
id | versions
-----+---------------------------------
xyz | {2001-01-01 00:00:00-0500: 1.0}
这就是我查询数据的方式:
def id = "xyz"
def cfName = "t_index_credential"
def mapSerializer = new MapSerializer<Date,String>(DateType.instance, UTF8Type.instance)
def strSerializer = StringSerializer.get()
def cf = ColumnFamily.newColumnFamily(cfName, strSerializer, mapSerializer)
def cql = "SELECT * FROM ${cfName} WHERE id = '${id}';"
def query = keyspace.prepareQuery(cf).withCql(cql)
def result = query.execute().getResult()
result.getRows().each { row ->
println "rowKey: " + row.getKey()
}
这个的输出是:
rowKey: null
尝试访问行中的任何列会导致以下结果:
result.getRows().each { row ->
row.getColumns().each { col ->
println col.dump()
}
}
org.apache.cassandra.db.marshal.MarshalException: Not enough bytes to read a map
感觉好像我错过了一些非常简单的东西。我做对了吗?