如何在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)