如何将 Cassandra/ScyllaDB 文本转换为 bigint,反之亦然?
How to convert Cassandra/ScyllaDB text to bigint and vice-versa?
在 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 因为它不只存储数字。
cql中没有这个默认函数。但是您可以创建一个,请参阅 UDF。 Cassandra 支持 UDF 但 Scylladb 还不支持 UDF
让我们创建这些函数:
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);';
这里bigintAstext
会把bigint转成text,textAsbigint
会把text转成bigint
如何使用?
让我们创建一个table并插入数据
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 ;
输出:
test.bigintastext(id) | test.textasbigint(data)
-----------------------+-------------------------
10 | 10
注意:默认情况下禁用 UDF(用户定义的函数),您可以通过在 cassandra.yaml
上设置 enable_user_defined_functions: true
来启用它
在 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 因为它不只存储数字。
cql中没有这个默认函数。但是您可以创建一个,请参阅 UDF。 Cassandra 支持 UDF 但 Scylladb 还不支持 UDF
让我们创建这些函数:
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);';
这里bigintAstext
会把bigint转成text,textAsbigint
会把text转成bigint
如何使用?
让我们创建一个table并插入数据
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 ;
输出:
test.bigintastext(id) | test.textasbigint(data)
-----------------------+-------------------------
10 | 10
注意:默认情况下禁用 UDF(用户定义的函数),您可以通过在 cassandra.yaml
enable_user_defined_functions: true
来启用它