在下面的代码示例中,有一个'地址'类型和插入工作正常。但是,如果我向映射到 new_attribute 类型的地址类型( new_attribute )添加其他属性,然后插入user_profiles配置文件,我会收到与类型映射不兼容的错误。对Cassandra来说很新,所以任何帮助都会受到赞赏。
CREATE TYPE new_attribute (
name text,
*map_l list<text>*
);
CREATE TYPE address (
street text,
city text,
zip int,
*new_attribute map<text, FROZEN<list<new_attribute>>>*
);
CREATE TABLE user_profiles (
login text PRIMARY KEY,
first_name text,
last_name text,
email text,
addresses map<text, frozen<address>>
);
// Inserts a user with a home address
INSERT INTO user_profiles(login, first_name, last_name, email, addresses)
VALUES ('tsmith',
'Tom',
'Smith',
'tsmith@gmail.com',
{ 'home': { street: '1021 West 4th St. #202',
city: 'San Fransisco',
zip: 94110 ,
*new_attribute: [{'name': 'some value',
map_l: ['list', 'of', 'text']}]}});*
答案 0 :(得分:1)
我不确定你的确切错误是什么,但这是支持的(至少在更新的Cassandra版本中)。我认为你在该属性的CQL文字中只有一个错误。所有这些嵌套的集合都令人费解。这是一个工作文字:
INSERT INTO user_profiles(login, first_name, last_name, email, addresses)
VALUES ('tsmith',
'Tom',
'Smith',
'tsmith@gmail.com',
{'home': {street: '1021 West 4th St. #202',
city: 'San Fransisco',
zip: 94110 ,
new_attribute: {'key': [{name: 'some value',
map_l: ['list', 'of', 'text']}]}}});
答案 1 :(得分:1)
删除围绕名称的简单引号:&#39;某些值&#39;
这非常棘手,但UDT文字与使用CQL的地图文字略有不同:
地图文字:{'key1': 'value1', 'key2': 'value2'}
UDT文字:{field1: 'value1', field2: 'value2'}