gpt4 book ai didi

cassandra - 如何使用 CQL (Cassandra) 查询集合中用户定义类型的字段

转载 作者:行者123 更新时间:2023-12-02 19:59:48 25 4
gpt4 key购买 nike

我正在使用 CQL 3.1 中的用户定义类型(下面的 cqlsh 信息):

[cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]

我创建了以下用户定义类型(出于演示目的而在此处进行了简化):

create type fullname ( firstname text, lastname text );

然后我创建了一个表,其中包含一组 fulsome 类型:

create table people ( id UUID primary key, names set < frozen <fullname>> );

我可以使用以下方法将行插入表中:

insert into people (id, names) values (
now(),
{{firstname: 'Jim', lastname: 'Jones'}}
);

结果看起来不错:

select * from people;

id | names
--------------------------------------+-----------------------------------------
69ba9d60-a06b-11e4-9923-0fa29ba414fb | {{firstname: 'Jim', lastname: 'Jones'}}

我的问题是:如何获取所有名字条目?如果我没有使用 set,而只是使用全名,我可以使用点符号:

select name.firstname from people;

但这显然行不通,因为我正在使用一套。在正常使用中(没有 UDT),集合永远不需要点表示法,因为所有条目都是简单类型(文本、UUID 等)。我尝试使用其他编程语言中所有常见的嫌疑人......

select names.firstname...
select names[].firstname...
select names['firstname']...

网络上有关 UDT 的唯一信息来自 DataStax web site ,这不属于这个用例。

以前有人尝试过吗?或者我正在做的事情根本就是不允许的?

谢谢

约翰

最佳答案

我自己尝试了一下。如果您的 UDT 不在集合中,您可以撤回单个属性,这是正确的。但是当它在集合中时(我尝试了 SETMAP 类型),它不起作用。我认为这更多的是对集合的限制,而不是对 UDT 的限制。

如果您阅读了 DataStax 文档 Using Collections ,您会注意到没有一个示例显示如何拉回集合中的单个元素。这是您在访问 UDT 元素上的属性之前首先必须执行的操作。无论如何,这与如何将集合视为列有关,因此在查询中返回整个列值。

目前有为此开放的 JIRA 票证 ( CASSANDRA-7396 ) 和其他功能。所以我想我们会在不久的将来看到它。但就目前而言,这是不可能的。

关于cassandra - 如何使用 CQL (Cassandra) 查询集合中用户定义类型的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28038978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com