Dictionary Cassandra映射是否可以保留空值

Dictionary Cassandra映射是否可以保留空值,dictionary,null,cassandra,Dictionary,Null,Cassandra,卡桑德拉(CQL 3)map是否可以保留空值?我认为允许使用空值,但我的程序失败表明情况并非如此。或者我正在使用的驱动程序中是否存在错误 委员会: 映射是一组键入的键值对,其中键是唯一的。此外,请注意,映射在内部是按键排序的,因此将始终按该顺序返回 因此键可能不为null(否则排序将不可能),但没有提到映射值不为null的要求 我有一个字段是映射,我正试图使用Java映射中的值来写入该字段。其中一个映射值(UUIDs)为空。在编组映射的UUID时,这似乎会导致Cassandra客户端代码(Cas

卡桑德拉(CQL 3)
map
是否可以保留空值?我认为允许使用空值,但我的程序失败表明情况并非如此。或者我正在使用的驱动程序中是否存在错误

委员会:

映射是一组键入的键值对,其中键是唯一的。此外,请注意,映射在内部是按键排序的,因此将始终按该顺序返回

因此键可能不为null(否则排序将不可能),但没有提到映射值不为null的要求

我有一个字段是
映射
,我正试图使用Java
映射
中的值来写入该字段。其中一个映射值(
UUID
s)为空。在编组映射的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]

UUIDGen.decompose(UUID)
方法对null
UUID
没有特殊处理,因此NPE。与
JdbcBoolean.decompose(Boolean)
相反,它将空
布尔值分解为空字节缓冲区。类似地,
JdbcDate.decompose(Date)
将null
Date
分解为空字节缓冲区



如果我有一个包含空整数的映射(使用带有空值的Java
map
,对于Cassandra
map
),我可能会产生类似的问题,因此这个问题并不局限于
uuid
值。

你说得对,映射中不支持空值。我以前遇到过这种情况,就像你们找不到相关的文档一样——在类似的情况下,我帮助自己处理cqlsh

一个小测验就能给你答案

CREATE TABLE map_example (
  id text,
  m map<text, text>,
  PRIMARY KEY ((id))
)
>错误请求:集合内部不支持null


嗯,Carlo

如果他们要允许空值,那么数据类型似乎需要一致地处理它们。所以我认为这是一个错误。
insert into map_example (id, m ) VALUES ( 'a', {'key':null});