每当我使用row.getToken(“fieldname”)时,都会收到InvalidTypeException?

nx7onnlm  于 2022-09-27  发布在  Cassandra
关注(0)|答案(1)|浏览(173)

对于下面的代码,每当我使用row.getToken("fieldname")时,我都会收到InvalidTypeException。

Record RowToRecord(Row rw) {

    ColumnDefinitions cd = rw.getColumnDefinitions();
    Record rec = new Record();
    int i;
    for(i = 0; i < cd.size(); i++) {
        rec.fields.add(cd.getName(i));
        System.out.println(cd.getName(i));
        //System.out.println((rw.getToken(cd.getName(i))).getValue());
        Token tk = rw.getToken(cd.getName(i));    //// InvalidTypeException on this line.
        //System.out.println(tk.getValue()+" "+tk.getType().toString());
        rec.values.add(tk.getValue());
        rec.types.add(tk.getType().toString());
        //Token tk = new Token();

    }
    return rec;
}
b1payxdu

b1payxdu1#

getToken用于在包含Cassandra标记的列上调用。在99%的情况下,这将是调用token() CQL函数的结果,例如此查询中的第一列:

select token(id), col1 from my_table where id = ...

您的代码对所有列都调用它,一旦您的列与标记的CQL类型不匹配,它就会失败。
该CQL类型取决于集群中使用的分区器:

  • murrous3 partitioner(默认值):token(...)将返回BIGINT
  • 随机分区器:VARINT
  • 有序分区器:BLOB

理论上,您可以对任何具有这种类型的列调用getToken(尽管在实践中,它可能只对token()调用的结果列有意义,如上所述)。

相关问题