首页 > 解决方案 > 如何获取 cassandra 列表类型列项目的大小

问题描述

卡桑德拉表

 seq | keywords            | timestamp
-----+---------------------+---------------
 100 | ['apple', 'banana'] | 1488637750836

想要的结果

 seq | keyword_size
-----+--------------
 100 | 2

询问

select
    seq,
    something(keywords) as keyword_size
from
    t
where
    seq = 100

是否有类似计数列项目的功能?

标签: listcassandracount

解决方案


没有内置方法可以做到这一点

您可以做的是使用查询获取关键字,并使用 Java 或其他编程语言从应用程序后端获取大小。

或者 Cassandra 2.2 及更高版本允许用户定义可应用于存储在表中的数据作为查询结果的一部分的函数 (UDT)。你可以试试下面的UDF

CREATE OR REPLACE FUNCTION lsizeof(data list<text>) CALLED ON NULL INPUT RETURNS int LANGUAGE java AS 'return data.size();';

现在你有了 UTF 函数lsizeof,下面是如何使用如下查询来获取列表的大小

SELECT seq, lsizeof(keywords) as keyword_size FROM test_list;

输出 :

 seq | keyword_size
-----+--------------
 100 |            2

注意:UDF(用户定义函数)默认是禁用的,你可以通过设置 enable_user_defined_functions: true on cassandra.yaml 来启用它


推荐阅读