我将嵌套的json值存储在cassandra中,因为我有很多字段,有没有办法为没有输入的字段保留未设置的值
假设我有一张像下面这样的table,
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列。我也尝试过“默认未设置”,但它不起作用
我只是用这个表中的两个字段框起来,类似于我有多个带有嵌套json对象的字段。是否有避免空插入的解决方法
1条答案
按热度按时间qhhrdooz1#
更新后回答问题(2019年10月15日更新:更新后的答案不正确,因为本例中存在复制粘贴错误(用户对用户2)!-看起来,当从json更新时,udt被完全替换了):
你用的是
frozen
udt,并且它会立即更新(作为一个二进制对象),因此如果数据中缺少字段,那么它将表示为null
. 但如果你用的是非冷冻udtDEFAULT UNSET
按要求工作-缺少的字段不会覆盖现有值:答案的第一个变体:
默认情况下,json是用
DEFAULT NULL
指定选项-这意味着所有缺少的字段都替换为null
,以便删除现有数据。如果要取消设置,则需要在json值之后指定相应的选项,如下所示:有关此主题的说明,请参阅cassandra文档。
p、 如果我没记错的话,这个选项可能并不存在于每个Cassandra版本中。