Ответ 1
null
поля не существуют в Cassandra, если вы не добавите их самостоятельно.
Возможно, вы думаете о модели данных CQL, которая скрывает определенные детали реализации, чтобы иметь более понятную модель данных. Кассандра разрежена, что означает, что фактически хранятся только данные, которые используются. Вы можете визуализировать это, добавив некоторые тестовые данные в Cassandra через CQL.
cqlsh> CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1 } ;
cqlsh> use test ;
cqlsh:test> CREATE TABLE foo (name text, age int, pet text, primary key (name)) ;
cqlsh:test> insert into foo (name, age, pet) values ('yves', 81, 'german shepherd') ;
cqlsh:test> insert into foo (name, pet) values ('coco', 'ferret') ;
cqlsh:test> SELECT * FROM foo ;
name | age | pet
-----+-----+------------------
coco | null | ferret
yves | 81 | german shepherd
Так что даже кажется, что существует нулевое значение, фактическое значение несуществует - CQL показывает вам null
, потому что это имеет больше смысла, интуитивно.
Если вы посмотрите на таблицу со стороны Thrift, вы увидите, что таблица не имеет такого значения для возраста coco
.
$ bin/cassandra-cli
[[email protected]] use test;
[[email protected]] list foo;
RowKey: coco
=> (name=, value=, timestamp=1389137986090000)
=> (name=age, value=00000083, timestamp=1389137986090000)
-------------------
RowKey: yves
=> (name=, value=, timestamp=1389137973402000)
=> (name=age, value=00000051, timestamp=1389137973402000)
=> (name=pet, value=6765726d616e207368657068657264, timestamp=1389137973402000)
Здесь вы можете ясно видеть, что yves
имеет два столбца: age
и pet
, а coco
только один: age
.