Essayons cela. Je vais commencer par une table simple, contenant une colonne de type valuemap
map<text,tuple<int,float,text>
que vous avez ci-dessus:
CREATE TABLE tupleTest (
key text,
value text,
valuemap map<text, FROZEN<tuple<int,float,text>>>,
PRIMARY KEY (key));
Je vais INSERT
quelques données:
INSERT INTO tupletest (key,value,valuemap) VALUES ('1','A',{'a':(0,0.0,'hi')});
INSERT INTO tupletest (key,value,valuemap) VALUES ('2','B',{'b':(0,null,'hi')});
INSERT INTO tupletest (key,value,valuemap) VALUES ('3','C',{'c':(null,null,'hi')});
Et puis je vais SELECT
il, juste pour voir:
[email protected]:stackoverflow> SELECT * FROM tupletest ;
key | value | valuemap
-----+-------+---------------------------
3 | C | {'c': (None, None, 'hi')}
2 | B | {'b': (0, None, 'hi')}
1 | A | {'a': (0, 0, 'hi')}
(3 rows)
La principale crainte au sujet explicitement INSERT
valeurs NULL dans ing Cassandra, est que « non colonnes "rmal", ils créent réellement des pierres tombales. Mais puisque nous ne définissons pas une colonne entière à NULL, simplement un élément dans un tuple (imbriqué dans une carte), ce n'est pas le cas. En fait, ils montrent None
. Et quand je regarde les SSTables sous-jacents, je ne vois pas non plus de preuve qu'une pierre tombale a été écrite.
Normalement, je dirais que INSERT
explicitement NULL dans Cassandra est une idée terrible et terrible. Mais dans ce cas, cela ne devrait pas vous causer de problèmes. Maintenant, quant à savoir si cela est considéré comme "légitime" ou une bonne pratique ... eh bien, mes sens de modélisation de données ne sont pas approuvés. Je trouverais une autre façon de représenter l'absence d'une valeur dans un type de tuple, car quelqu'un (le développeur qui vous suit) pourrait voir cela et interpréter cela comme étant "ok" pour explicitement INSERT
NULL dans les autres valeurs de colonne.
Bonne réponse Aaron, merci. Je n'ai jamais vu le type 'valuemap' avant et il n'est pas non plus documenté sur la page des types de données CQL 3.3. Savez-vous où je peux trouver quelques détails sur ce type? – reikje
@reikje 'valuemap' n'est pas un type c'est un nom de colonne d'une carte qui contient un tuple imbriqué à l'intérieur. Désolé pour la confusion là-bas. – Aaron
Je vois, eu un peu confus à cause de la carte-suffixe :) – reikje