如何获取Cassandra列表类型列的项目大小

时间:2018-07-31 03:15:24

标签: list cassandra count

卡桑德拉表

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

想要的结果

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

查询

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

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

1 个答案:

答案 0 :(得分:2)

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

您可以做的是使用查询来获取关键字,并使用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(用户定义的函数)是禁用的,您可以通过在cassandra.yaml上设置enable_user_defined_functions:true来启用它。