Cassandra, изменяющая таблицу для добавления новых столбцов, добавляет null в виде текста

#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)