如何解决如何在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)
,
TODATE
以column_name
作为输入。另外,CAST
仅在SELECT
语句中使用。也许您可以通过程序来实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。