Я пробую API YugaByte Cassandra (YCQL) и заинтересован в использовании расширений типа данных JSONB.
Но у меня возникают проблемы как с обновлением атрибута в существующем столбце JSONB, так и с добавлением нового атрибута в существующий столбец JSONB.
Поддерживается ли это в YugaByte? Вот что я пробовал:
Рассмотрим следующий пример, в котором есть одна строка с простым ключом и столбец JSONB.
cqlsh:k> CREATE TABLE T (key int PRIMARY KEY, value jsonb);
cqlsh:k> INSERT INTO T(key, value) VALUES(1, '{"author": "Charles", "title": "Hello World"}');
cqlsh:k> SELECT * FROM T;
key | value
-----+--------------------------------------------
1 | {"author":"Charles","title":"Hello World"}
(1 rows)
Все идет нормально.
Если я попытаюсь обновить существующий атрибут внутри документа, я увижу следующую ошибку:
cqlsh:k> UPDATE T SET value->'author' = 'Bruce' WHERE key=1;
InvalidRequest: Error from server: code=2200 [Invalid query] message="SQL error: \
Invalid Arguments. Corruption: JSON text is corrupt: Invalid value.
Если я попытаюсь добавить новый атрибут в существующий атрибут JSONB, я получу следующую ошибку:
cqlsh:k> UPDATE T SET value->'price' = '10' WHERE key=1;
InvalidRequest: Error from server: code=2200 [Invalid query] message="SQL error: \
Execution Error. Could not find member:
Поддерживается ли это, и если да, то каков правильный синтаксис?