CQL 查询以获取 Cassandra DB 的 LIST DATA TYPE 中的元素计数?

CQL query to get count of elements in LIST DATATYPE of CassandraDB?

我的 table 中有一列具有列表数据类型。我想使用 CQL 获取列表中的项目数 我试过了,但找不到正确的查询。谁能帮帮我?

所以在 Cassandra 中没有一个标准的方法来完成这个。最简单的方法是 SELECT 来自 table 的列表并在应用程序端提取其项目的计数。

也就是说,一种通过构建用户定义函数 (UDF) 来实现此目的的方法。首先,Cassandra 默认禁用 UDF,以防止集群用户执行恶意代码。如果您同意启用它们,您将在 cassandra.yaml 文件中找到该选项。这是一个简单的布尔值,因此您需要将其设置为 true:

enable_user_defined_functions: true

当然,您必须 stop/restart 群集才能使此更改生效。

接下来,您可以创建一个 UDF 来 return 表示列表大小的整数,如下所示:

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() 方法。

现在,我可以将 countlist 函数与 CQL 一起使用。所以假设我有一个 table 来跟踪 parents' children:

CREATE TABLE kids (
    parent text PRIMARY KEY,
    children list<text>);

对于我来说,可以这样查询:

SELECT parent,countlist(children) FROM kids WHERE parent='Aaron';

 parent | Whosebug.countlist(children)
--------+-----------------------------------
  Aaron |                                 4

(1 rows)