每当我使用 row.getToken("fieldname") 时,我都会收到 InvalidTypeException?
I am getting an InvalidTypeException whenever I am using the row.getToken("fieldname")?
对于以下代码,每当我使用 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;
}
getToken
意味着在包含 Cassandra 令牌的列上调用。在 99% 的情况下,这将是调用 token()
CQL 函数的结果,例如此查询中的第一列:
select token(id), col1 from my_table where id = ...
您的代码正在为所有列调用它,一旦您有一个与标记的 CQL 类型不匹配的列,它就会失败。
该 CQL 类型取决于集群中使用的分区程序:
- murmur3 分区程序(默认):
token(...)
将 return 一个 BIGINT
- 随机分区器:VARINT
- 有序分区器:BLOB
理论上,您可以在具有此类型的任何列上调用 getToken
(尽管在实践中,它可能只对作为 token()
调用结果的列有意义,如上所述)。
对于以下代码,每当我使用 row.getToken("fieldname")
.
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;
}
getToken
意味着在包含 Cassandra 令牌的列上调用。在 99% 的情况下,这将是调用 token()
CQL 函数的结果,例如此查询中的第一列:
select token(id), col1 from my_table where id = ...
您的代码正在为所有列调用它,一旦您有一个与标记的 CQL 类型不匹配的列,它就会失败。
该 CQL 类型取决于集群中使用的分区程序:
- murmur3 分区程序(默认):
token(...)
将 return 一个 BIGINT - 随机分区器:VARINT
- 有序分区器:BLOB
理论上,您可以在具有此类型的任何列上调用 getToken
(尽管在实践中,它可能只对作为 token()
调用结果的列有意义,如上所述)。