Установка значения по умолчанию unset для пользовательских полей типа данных в Кассандре - PullRequest
0 голосов
/ 24 сентября 2018

Я храню вложенные значения JSON в Cassandra, так как у меня есть много полей, есть ли способ сохранить неустановленные значения для полей, не входящих в

Рассмотрим, у меня есть таблица, как показано ниже,

CREATE TYPE address (number int, street text, address2 text);

CREATE TABLE users (
    id int PRIMARY KEY,
            street_address frozen<address>
);

INSERT INTO users JSON '{"id": 5, "street_address": 
   {"number": 123, "street": "Main St."}}';

Если я выполнил приведенный выше запрос ниже, это значение столбца,

5   {number:123,street:'Main St.',address2:NULL}

Я хочу игнорировать эту вставку address2:NULL во 2-й столбец.Я также попытался использовать «unset по умолчанию», но он не работает

Я только что выделил 2 поля в этой таблице, аналогично тому, что у меня есть несколько полей с вложенными объектами JSON.Есть ли обходной путь, чтобы избежать нулевой вставки

1 Ответ

0 голосов
/ 25 сентября 2018

Ответ после обновленного вопроса:

Вы используете frozen UDT здесь, и он обновляется сразу ( как один двоичный объект ), поэтому, если поле отсутствует вданные, то это представляется как null.Но если вы используете не замороженный UDT, то DEFAULT UNSET работает как требуется - пропущенное поле не перезаписывает существующее значение:

cqlsh:test> INSERT INTO users2 JSON '{"id": 5, "street_address": {"number": 123, 
    "street": "Main St.", "address2": "test" }}';
cqlsh:test> SELECT * from users2;

 id | street_address
----+-----------------------------------------------------
  5 | {number: 123, street: 'Main St.', address2: 'test'}

(1 rows)
cqlsh:test> INSERT INTO users JSON '{"id": 5, "street_address": {"number": 1234, 
    "street": "Main St.3"}}' DEFAULT UNSET ;
cqlsh:test> SELECT * from users2;

 id | street_address
----+-----------------------------------------------------
  5 | {number: 123, street: 'Main St.', address2: 'test'}

(1 rows)

Первый вариант ответа:

По умолчанию JSON вставляется с указанным параметром DEFAULT NULL - это означает, что все пропущенные поля заменяются на null, поэтому они могут удалять существующие данные.Если вы хотите, чтобы они были сброшены, вам необходимо указать соответствующую опцию после значения JSON, например:

INSERT INTO mytable JSON '{ "\"myKey\"": 0, "value": 0}' DEFAULT UNSET;

См. Документация Cassandra для получения разъяснений по этой теме.

PS Если я правильно помню, эта опция может существовать не в каждой версии Cassandra.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...