用户定义类型可以引用 Cassandra 中的另一个用户定义类型吗?
Can a User Defined Type reference another user defined type in Cassandra?
在下面的代码示例中有一个 'address' 类型并且插入工作正常。但是,如果我向映射到 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']}]}});*
我不确定您的确切错误是什么,但这是受支持的(至少在最新版本的 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']}]}}});
删除 name 周围的单引号:'some value'
这非常棘手,但 UDT 文字与使用 CQL 的地图文字略有不同:
地图文字:{'key1': 'value1', 'key2': 'value2'}
UDT 文字:{field1: 'value1', field2: 'value2'}
在下面的代码示例中有一个 'address' 类型并且插入工作正常。但是,如果我向映射到 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']}]}});*
我不确定您的确切错误是什么,但这是受支持的(至少在最新版本的 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']}]}}});
删除 name 周围的单引号:'some value'
这非常棘手,但 UDT 文字与使用 CQL 的地图文字略有不同:
地图文字:{'key1': 'value1', 'key2': 'value2'}
UDT 文字:{field1: 'value1', field2: 'value2'}