Die sichere Weise, wäre, einen Zeitstempel zurückzugeben und das Jahr clientseitig auszugruppieren.
Nativ hat Cassandra keine Funktionen, die dabei helfen können. Sie können jedoch eine benutzerdefinierte Funktion (UDF) schreiben, um dies zu erreichen:
Zuerst sind benutzerdefinierte Funktionen standardmäßig deaktiviert. Sie müssen diese Einstellung in Ihrer cassandra.yaml anpassen und Ihre Knoten neu starten.
enable_user_defined_functions=true
HINWEIS: Diese Einstellung wird auf diese Weise aus einem Grund Verzug geraten. Obwohl Cassandra 3.x einige Sicherheitsvorkehrungen zum Schutz vor bösartigem Code enthält, ist es ratsam, diese Option deaktiviert zu lassen, es sei denn, Sie benötigen beides und Sie wissen, was Sie tun. Und selbst dann sollten Sie UDFs im Auge behalten, die definiert werden.
Jetzt werde ich meine Funktion erstellen Java verwenden, aus cqlsh:
[email protected]:stackoverflow> CREATE OR REPLACE FUNCTION year (input DATE)
RETURNS NULL ON NULL INPUT RETURNS TEXT
LANGUAGE java AS 'return input.toString().substring(0,4);';
Beachten Sie, dass es eine Reihe von Möglichkeiten (und Typen) die aktuelle Datum/Uhrzeit abfragen:
[email protected]:stackoverflow> 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)
Um nur nur für Jahr wieder, ich kann meine year
Funktion auf den todate(now())
Spalt nennen:
SELECT stackoverflow.year(todate(now())) as year FROm system.local;
year
------
2017
(1 rows)