Rae*_*ald 8 null dictionary cassandra
愿Cassandra(CQL 3)map保持空值吗?我认为允许空值,但我的程序失败则表示不然.或者我使用的驱动程序中是否有错误?
映射是一组键入的键值对,其中键是唯一的.此外,请注意,地图在内部按其键排序,因此始终按该顺序返回.
所以键可能不是null(否则排序是不可能的),但是没有提到要求map 值不为null.
我有一个字段,map<timestamp,uuid>我试图用Java中的值写入Map< Date, UUID >.其中一个映射值为UUIDnull.在编组映射的UUID时,这似乎会导致Cassandra客户端代码(Cassandra版本1.2.6,从DataStax Java驱动程序1.0.1调用)中的NPE:
java.lang.NullPointerException
at org.apache.cassandra.utils.UUIDGen.decompose(UUIDGen.java:82)
at org.apache.cassandra.cql.jdbc.JdbcUUID.decompose(JdbcUUID.java:55)
at org.apache.cassandra.db.marshal.UUIDType.decompose(UUIDType.java:187)
at org.apache.cassandra.db.marshal.UUIDType.decompose(UUIDType.java:43)
at org.apache.cassandra.db.marshal.MapType.decompose(MapType.java:122)
at org.apache.cassandra.db.marshal.MapType.decompose(MapType.java:29)
at com.datastax.driver.core.BoundStatement.bind(BoundStatement.java:188)
at [my method]
Run Code Online (Sandbox Code Playgroud)
该UUIDGen.decompose(UUID)方法没有特殊处理null UUID,因此NPE.与之对比JdbcBoolean.decompose(Boolean),将null分解为Boolean空字节缓冲区.类似地,JdbcDate.decompose(Date)将null分解为Date空字节缓冲区.
如果我有一个包含空整数的映射(使用Map< Date, Integer >带有空值的Java ,对于Cassandra map<timestamp,int>),我可以产生类似的问题,所以这个问题不仅限于uuid值.
你是对的,地图中支持空值(但是?).我之前遇到过这个问题,就像你找不到相关的文档一样 - 在类似的情况下我用cqlsh帮助自己
一个小测试给你答案
CREATE TABLE map_example (
id text,
m map<text, text>,
PRIMARY KEY ((id))
)
Run Code Online (Sandbox Code Playgroud)
尝试
insert into map_example (id, m ) VALUES ( 'a', {'key':null});
Run Code Online (Sandbox Code Playgroud)
>错误请求:集合内不支持null
HTH,卡罗
| 归档时间: |
|
| 查看次数: |
1980 次 |
| 最近记录: |