如何使用用户定义的函数获取 cassandra 的 blob 列的大小?

Posted

技术标签:

【中文标题】如何使用用户定义的函数获取 cassandra 的 blob 列的大小?【英文标题】:How can I get size of blob column of cassandra using user defined functions? 【发布时间】:2020-02-12 13:15:33 【问题描述】:

我在尝试

cqlsh:my_keyspace>  CREATE FUNCTION IF NOT EXISTS len(input blob) 

CALLED ON NULL INPUT

RETURNS int LANGUAGE java AS '

return input.length();';

错误:

InvalidRequest: Error from server: code=2200 [Invalid query] message="Java source compilation failed:
Line 2: The method length() is undefined for the type ByteBuffer

如果我将输入更改为文本,它正在工作..是否为字节缓冲区类型定义了任何内容?我需要从表中找到 blob 列的长度..

有没有办法在 cassandra spark 或任何工具中找到它? 我是 cassandra 世界的新手,请帮帮我..

【问题讨论】:

【参考方案1】:

在底层,Cassandra 使用 ByteBuffer Java 类型作为其 blob 数据类型。此类型没有length 方法,因此您需要使用positionremaining 来确定缓冲区中有多少数据(depending on what you're doing with it)。

这个功能很好用:

CREATE OR REPLACE FUNCTION blen (b blob) 
   CALLED ON NULL INPUT 
   RETURNS int 
   LANGUAGE java AS 'if (b == null) return 0; else return b.remaining();';

【讨论】:

以上是关于如何使用用户定义的函数获取 cassandra 的 blob 列的大小?的主要内容,如果未能解决你的问题,请参考以下文章

在Cassandra中使用用户定义函数时的Readtimeout

Cassandra 用户定义类型上的 Django Queryset 引发类型错误

Cassandra 中的用户定义类型 (UDT) 行为

如何使用 Cassandra PDO 获取价值?

Cassandra中的一对多映射

如何在 Cassandra 中使用 spark 获取行范围