list - 如何获取 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
是否有类似计数列项目的功能?
解决方案
没有内置方法可以做到这一点
您可以做的是使用查询获取关键字,并使用 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 来启用它
推荐阅读
- amazon-web-services - 关于限制访问 AMI 以在亚马逊市场上销售
- php - 如何使用 PHP 从 pre-pre 页面中检索表单数据
- python - 是否可以在其内部提及一个类?
- apache-kafka - 有没有办法将 Amazon MSK 主题直接转储到 S3?
- ruby - Ruby:为什么不能将运算符应用于实例变量?
- r - R:如何从文本块中提取所有日期
- python-3.x - 是否有提到的代码的解释可用?
- selenium-webdriver - 在 Jmeter 中检查 Selenium WebDriver 中的响应代码
- javascript - 在 vue chrome 扩展中访问页面上的 DOM 元素
- c# - ASP.NET WebForms:Repeater 控件中的图像尺寸模式