Joh*_*n M 9 cql set user-defined-types cassandra
我在CQL 3.1中使用用户定义的类型(下面的cqlsh信息):
[cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]
Run Code Online (Sandbox Code Playgroud)
我创建了以下用户定义类型(此处为了演示目的而简化):
create type fullname ( firstname text, lastname text );
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个包含一组类型fulsome的表:
create table people ( id UUID primary key, names set < frozen <fullname>> );
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法在表中插入行:
insert into people (id, names) values (
now(),
{{firstname: 'Jim', lastname: 'Jones'}}
);
Run Code Online (Sandbox Code Playgroud)
结果看起来不错:
select * from people;
id | names
--------------------------------------+-----------------------------------------
69ba9d60-a06b-11e4-9923-0fa29ba414fb | {{firstname: 'Jim', lastname: 'Jones'}}
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何获取所有名字条目?如果我没有使用set,只使用fullname,我可以使用点符号:
select name.firstname from people;
Run Code Online (Sandbox Code Playgroud)
但这显然不起作用,因为我正在使用一套.在正常使用中(没有UDT),集合将永远不需要点表示法,因为所有条目都是简单类型(文本,UUID等).我尝试使用其他编程语言的所有常见嫌疑人......
select names.firstname...
select names[].firstname...
select names['firstname']...
Run Code Online (Sandbox Code Playgroud)
关于网络上UDT的唯一信息来自DataStax网站,该网站没有涉及此用例.
以前有人试过吗?或者我正在做的事情是不允许的?
谢谢,
约翰
我继续尝试了一下。如果您的UDT不在集合中,则可以撤回单个属性是正确的。但是,当它在集合中时(我尝试过SET
和MAP
类型都一样),它不起作用。我认为这是对集合的限制,而不是对UDT的限制。
如果您通读了《使用Collections的DataStax》文档,您会注意到,所有示例都没有显示如何拉回Collection中的单个元素。在访问UDT元素上的属性之前,首先要做的是。无论如何,这与如何将集合视为一列有关,因此整个列的值都会在查询中返回。
目前为此打开了JIRA票证(CASSANDRA-7396)和其他功能。因此,我认为我们将在不久的将来看到它。但是目前,这还不可能。
归档时间: |
|
查看次数: |
7784 次 |
最近记录: |