如何将日期类型的值转换为 Cassandra 中的文本?
How to convert a value of date type to text in Cassandra?
我有一个具有以下结构的 Cassandra table -
CREATE TABLE timeseries_s (
prop_name text PRIMARY KEY,
description text,
value text
);
现在我需要在这个 table 中插入一个 属性,其值将是文本格式的当前日期。我创建了以下 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, description, value) VALUES ('xyz', 'Migration for DSE started at this time', CAST(TODATE(now()) AS TEXT));
错误 - SyntaxException:第 1:158 行在输入 '(' (... VALUES ('xyz', 'abc' , 演员
有什么建议吗?
TODATE
将 column_name
作为输入。此外,CAST
仅用于 SELECT
语句。大概你可以通过程序实现这个东西。
我能想到的完全在 Cassandra 端解决这个问题的唯一方法是使用用户定义的函数。首先,您需要在 cassandra.yaml
:
中启用用户定义的函数
enable_user_defined_functions: true
节点重新启动后,我通过在我的 Whosebug
键空间中定义一个名为 totext
的函数来完成此操作,如下所示:
aploetz@cqlsh:Whosebug> 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',
Whosebug.totext(todate(now())));
> SELECT * FROM timeseries_s ;
prop_name | description | value
-----------+----------------------------------------+------------
xyz | Migration for DSE started at this time | 2020-09-03
(1 rows)
我有一个具有以下结构的 Cassandra table -
CREATE TABLE timeseries_s (
prop_name text PRIMARY KEY,
description text,
value text
);
现在我需要在这个 table 中插入一个 属性,其值将是文本格式的当前日期。我创建了以下 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, description, value) VALUES ('xyz', 'Migration for DSE started at this time', CAST(TODATE(now()) AS TEXT));
错误 - SyntaxException:第 1:158 行在输入 '(' (... VALUES ('xyz', 'abc' , 演员
有什么建议吗?
TODATE
将 column_name
作为输入。此外,CAST
仅用于 SELECT
语句。大概你可以通过程序实现这个东西。
我能想到的完全在 Cassandra 端解决这个问题的唯一方法是使用用户定义的函数。首先,您需要在 cassandra.yaml
:
enable_user_defined_functions: true
节点重新启动后,我通过在我的 Whosebug
键空间中定义一个名为 totext
的函数来完成此操作,如下所示:
aploetz@cqlsh:Whosebug> 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',
Whosebug.totext(todate(now())));
> SELECT * FROM timeseries_s ;
prop_name | description | value
-----------+----------------------------------------+------------
xyz | Migration for DSE started at this time | 2020-09-03
(1 rows)