#cassandra
#cassandra
Вопрос:
У меня есть таблица cassandra с данными в ней.
Я добавляю три новых столбца country
как text
, lat
и long
как double
.
При добавлении этих столбцов значения null вставляются против уже существующих строк в таблице. Однако null вставляется как text
в столбец country и null
как значение в столбцах lat и long.
Является ли это поведением по умолчанию и могу ли я добавить значение null в качестве значения под вновь созданными текстовыми столбцами?
Ответ №1:
Cassandra использует null
, чтобы показать, что значение отсутствует, а не то, что оно вставлено явно. В вашем случае, когда вы добавляете новые столбцы — они просто добавляются к спецификации таблицы, хранящейся в самой Cassandra, — существующие данные (хранящиеся в SSTables) не изменяются, поэтому, когда Cassandra считывает старые данные, она не находит значения для этих столбцов в SSTable и вместо этого выводит null.
Но вы можете вести себя так же без добавления новых столбцов — просто не вставляйте значение для определенного обычного столбца (у вас должны быть ненулевые значения для столбцов первичного ключа!). Например:
cqlsh> create table test.abc (id int primary key, t1 text, t2 text);
cqlsh> insert into test.abc (id, t1, t2) values (1, 't1-1', 't2-1');
cqlsh> insert into test.abc (id, t1) values (2, 't1-2');
cqlsh> insert into test.abc (id, t2) values (3, 't3-3');
cqlsh> SELECT * from test.abc;
id | t1 | t2
---- ------ ------
1 | t1-1 | t2-1
2 | t1-2 | null
3 | null | t3-3
(3 rows)