【问题标题】:CQL query to get count of elements in LIST DATATYPE of CassandraDB?CQL 查询以获取 Cassandra DB 的 LIST DATA TYPE 中的元素计数?
【发布时间】:2021-07-12 02:55:18
【问题描述】:

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

【问题讨论】:

    标签: database cassandra nosql cql cqlsh


    【解决方案1】:

    所以在 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&lt;text&gt; Cassandra 类型映射到java.util.List&lt;String&gt; Java 类型。从那里,它只是调用列表中的size() 方法。

    现在,我可以将 countlist 函数与 CQL 一起使用。所以假设我有一张表来跟踪父母的孩子:

    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)
    

    【讨论】:

      猜你喜欢
      • 2017-03-19
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多