如何在cassandra上获取当前年份
How to get current year on cassandra
如何在 Cassandra 中获取当前日期的一部分?在我的特殊情况下,我只需要得到年份。
我暂时说到这里 select dateof(now()) from system.local;
但是我在文档中找不到任何函数来获取年份
https://docs.datastax.com/en/dse/5.1/cql/cql/cql_reference/refCqlFunction.html#refCqlFunction__toTimestamp
我是 Cassandra 的新手,所以这可能是个愚蠢的问题。
safe 方法是 return 时间戳并在客户端解析年份。
Cassandra 本身没有任何功能可以帮助解决这个问题。但是,您可以编写用户定义函数 (UDF) 来完成此操作:
首先,默认情况下禁用用户定义的功能。您需要在 cassandra.yaml 中调整该设置并重新启动您的节点。
enable_user_defined_functions=true
注意:此设置默认为这种方式是有原因的。尽管 Cassandra 3.x 有一些适当的保护措施来防止恶意代码,但最好将其关闭,除非您需要它并且您知道自己在做什么。即便如此,您仍需要关注已定义的 UDF。
现在,我将在 cqlsh:
中使用 Java 创建我的函数
cassdba@cqlsh:Whosebug> CREATE OR REPLACE FUNCTION year (input DATE)
RETURNS NULL ON NULL INPUT RETURNS TEXT
LANGUAGE java AS 'return input.toString().substring(0,4);';
请注意,有多种方式(和类型)可以查询当前 date/time:
cassdba@cqlsh:Whosebug> SELECT todate(now()) as date,
totimestamp(now()) as timestamp, now() as timeuuid FROm system.local;
date | timestamp | timeuuid
------------+---------------------------------+-------------------------------------
2017-12-20 | 2017-12-20 21:18:37.708000+0000 | 58167cc1-e5cb-11e7-9765-a98c427e8248
(1 rows)
到 return 只有一年,我可以在 todate(now())
列上调用我的 year
函数:
SELECT Whosebug.year(todate(now())) as year FROm system.local;
year
------
2017
(1 rows)
如何在 Cassandra 中获取当前日期的一部分?在我的特殊情况下,我只需要得到年份。
我暂时说到这里 select dateof(now()) from system.local;
但是我在文档中找不到任何函数来获取年份 https://docs.datastax.com/en/dse/5.1/cql/cql/cql_reference/refCqlFunction.html#refCqlFunction__toTimestamp
我是 Cassandra 的新手,所以这可能是个愚蠢的问题。
safe 方法是 return 时间戳并在客户端解析年份。
Cassandra 本身没有任何功能可以帮助解决这个问题。但是,您可以编写用户定义函数 (UDF) 来完成此操作:
首先,默认情况下禁用用户定义的功能。您需要在 cassandra.yaml 中调整该设置并重新启动您的节点。
enable_user_defined_functions=true
注意:此设置默认为这种方式是有原因的。尽管 Cassandra 3.x 有一些适当的保护措施来防止恶意代码,但最好将其关闭,除非您需要它并且您知道自己在做什么。即便如此,您仍需要关注已定义的 UDF。
现在,我将在 cqlsh:
中使用 Java 创建我的函数cassdba@cqlsh:Whosebug> CREATE OR REPLACE FUNCTION year (input DATE)
RETURNS NULL ON NULL INPUT RETURNS TEXT
LANGUAGE java AS 'return input.toString().substring(0,4);';
请注意,有多种方式(和类型)可以查询当前 date/time:
cassdba@cqlsh:Whosebug> SELECT todate(now()) as date,
totimestamp(now()) as timestamp, now() as timeuuid FROm system.local;
date | timestamp | timeuuid
------------+---------------------------------+-------------------------------------
2017-12-20 | 2017-12-20 21:18:37.708000+0000 | 58167cc1-e5cb-11e7-9765-a98c427e8248
(1 rows)
到 return 只有一年,我可以在 todate(now())
列上调用我的 year
函数:
SELECT Whosebug.year(todate(now())) as year FROm system.local;
year
------
2017
(1 rows)