0

我对 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

感觉好像我错过了一些非常简单的东西。我做对了吗?

4

0 回答 0