Kann eine Cassandra (CQL 3) map
Nullwerte enthalten? Ich dachte, dass null Werte erlaubt sind, aber das Scheitern meines Programms schlägt etwas anderes vor. Oder gibt es einen Fehler in dem Treiber, den ich verwende?
Die offizielle Dokumentation für CQL map
s sagt :
Eine Map ist eine typisierte Gruppe von Schlüssel / Wert-Paaren, wobei Schlüssel eindeutig sind. Beachten Sie außerdem, dass die Map intern nach ihren Schlüsseln sortiert ist und daher immer in dieser Reihenfolge zurückgegeben wird.
Die Schlüssel dürfen also nicht null sein (sonst wäre das Sortieren unmöglich), aber es wird nicht erwähnt, dass map Werte nicht null sind.
Ich habe ein Feld, das ein map<timestamp,uuid>
ist, mit dem ich versuche, Werte in einem Java Map< Date, UUID >
zu schreiben. Einer der Kartenwerte ( UUID
s) ist null. Dies scheint eine NPE im Cassandra-Client-Code (Cassandra-Version 1.2.6, vom DataStax-Java-Treiber 1.0.1 aufgerufen) beim Marshalling der UUID der Karte zu verursachen:
Die Methode UUIDGen.decompose(UUID)
hat keine spezielle Behandlung von null UUID
, daher die NPE. Vergleichen Sie mit JdbcBoolean.decompose(Boolean)
, das eine Null Boolean
in einen leeren Byte-Puffer zerlegt. In ähnlicher Weise zerlegt JdbcDate.decompose(Date)
eine Null Date
in einen leeren Byte-Puffer.
Ich kann ein ähnliches Problem erzeugen, wenn ich eine Map mit null ganzen Zahlen habe (mit einem Java Map< Date, Integer >
mit einem Nullwert für eine Cassandra map<timestamp,int>
), also ist dieses Problem nicht auf uuid
values.
Sie haben Recht, Nullwerte werden (noch?) nicht in Maps unterstützt. Ich habe diese Sache schon einmal gesehen und konnte keine relative Dokumentation finden - in ähnlicher Situation helfe ich mir selbst mit cqlsh
Ein kleiner Test gibt Ihnen die Antwort
%Vor%probiere
aus %Vor%& gt; Ungültige Anforderung: null wird in Sammlungen nicht unterstützt
HTH, Carlo
Tags und Links dictionary cassandra null