如何在Cassandra中将日期类型的值转换为文本?

问题描述

我有一个具有以下结构的Cassandra表-

CREATE TABLE timeseries_s (
   prop_name text PRIMARY KEY,description text,value text
);

现在,我需要在此表中插入一个属性,该属性的值将是文本格式的当前日期。我创建了以下CQL,但它给了我以下错误-

 INSERT INTO timeseries_s (prop_name,description,value) VALUES ('xyz','abc',TODATE(now())));

错误-SyntaxException:行1:168输入')'不匹配,期望EOF(...'abc',TODATE(now()))[)] ...)

此后,我尝试了以下操作-

 INSERT INTO timeseries_s (prop_name,'Migration for DSE started at this time',CAST(TODATE(now()) AS TEXT));

错误-SyntaxException:第1:158行在输入'('(... VALUES('xyz','abc',CAST

有什么建议吗?

解决方法

我想想到的仅在Cassandra方面解决此问题的唯一方法是使用用户定义的函数。首先,您需要在cassandra.yaml中启用用户定义的功能:

enable_user_defined_functions: true

节点重新启动后,我通过在totext键空间中定义一个名为stackoverflow的函数来完成此操作,如下所示:

aploetz@cqlsh:stackoverflow> CREATE OR REPLACE FUNCTION totext (input DATE)
             RETURNS NULL ON NULL INPUT RETURNS TEXT
             LANGUAGE java AS 'return input.toString();';

创建该函数后,您可以像这样在INSERT中使用它:

> INSERT INTO timeseries_s (prop_name,description,value)
VALUES ('xyz','Migration for DSE started at this time',stackoverflow.totext(todate(now())));

> SELECT * FROM timeseries_s ;

 prop_name | description                            | value
-----------+----------------------------------------+------------
       xyz | Migration for DSE started at this time | 2020-09-03

(1 rows)
,

TODATEcolumn_name作为输入。另外,CAST仅在SELECT语句中使用。也许您可以通过程序来实现。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...