如何解决CQL 查询以获取 CassandraDB 的 LIST DATATYPE 中的元素计数?
我的表中有一个具有列表数据类型的列。我想使用 CQL 获取列表中的项目数 我试过了,但我无法找到正确的查询。有人可以帮我吗?
解决方法
因此在 Cassandra 中没有标准的方法来实现这一点。最简单的方法是从表中SELECT
列表并在应用程序端提取其项目的计数。
话虽如此,有一种方法可以通过构建用户定义函数 (UDF) 来实现这一点。首先,Cassandra 默认禁用 UDF,以防止集群用户执行恶意代码。如果您同意启用它们,您会在 cassandra.yaml
文件中找到该选项。这是一个简单的布尔值,因此您需要将其设置为 true
:
enable_user_defined_functions: true
当然,您必须停止/重新启动集群才能使此更改生效。
接下来,您可以创建一个 UDF 来返回一个表示列表大小的整数,如下所示:
CREATE OR REPLACE FUNCTION countlist (input List<text>)
RETURNS NULL ON NULL INPUT RETURNS int
LANGUAGE java AS 'return input.size();';
本质上,它的作用是将 List<text>
Cassandra 类型映射到 java.util.List<String>
Java 类型。从那里,它只需调用列表中的 size()
方法。
现在,我可以在 CQL 中使用 countlist
函数。假设我有一张桌子来跟踪父母的孩子:
CREATE TABLE kids (
parent text PRIMARY KEY,children list<text>);
对我来说,我可以这样查询:
SELECT parent,countlist(children) FROM kids WHERE parent='Aaron';
parent | stackoverflow.countlist(children)
--------+-----------------------------------
Aaron | 4
(1 rows)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。