如何将Cassandra / ScyllaDB文本转换为bigint,反之亦然?

时间:2017-05-22 09:50:44

标签: cassandra scylla

在PostgreSQL中,我可以这样做:

SELECT (col::BIGINT+1)::TEXT + '%' FROM bar WHERE id = 1
UPDATE bar SET col = (col::BIGINT+1)::TEXT WHERE id = 1 

如何在Cassandra / ScyllaDB中执行此操作?我需要将TEXT转换为BIGINT并返回TEXT来更新列值,列本身必须是TEXT,因为它不存储数字。

1 个答案:

答案 0 :(得分:1)

cql中没有默认函数。但您可以创建一个,请参阅UDF。 Cassandra支持UDF,但Scylladb尚不支持UDF

让我们创建这些功能:

http://localhost:containerPort

此处CREATE OR REPLACE FUNCTION bigintAstext (input bigint) CALLED ON NULL INPUT RETURNS text LANGUAGE java AS 'return String.valueOf(input);'; CREATE OR REPLACE FUNCTION textAsbigint (input text) CALLED ON NULL INPUT RETURNS bigint LANGUAGE java AS 'return Long.parseLong(input);'; 会将bigint转换为文本,bigintAstext会将文本转换为bigint

如何使用?

让我们创建一个表并插入数据

textAsbigint

现在您可以查询:

CREATE TABLE udf_test (
    id bigint PRIMARY KEY,
    data text
);

INSERT INTO udf_test (id , data ) VALUES ( 10, '10');

输出:

SELECT bigintAstext(id), textAsbigint(data) FROM udf_test ;

注意:默认情况下禁用UDF(用户定义的函数),您可以通过在 test.bigintastext(id) | test.textasbigint(data) -----------------------+------------------------- 10 | 10

上设置enable_user_defined_functions: true来启用它