2017-12-20 2 views
1

카산드라에서 현재 날짜의 일부분 만 얻으려면 어떻게해야합니까? 내 특별한 경우에는 그저 1 년을해야합니다.카산드라에서 현재 연도를 얻는 방법

나는 순간 select dateof(now()) from system.local;

이에 도착하지만 모든 기능은 문서 https://docs.datastax.com/en/dse/5.1/cql/cql/cql_reference/refCqlFunction.html#refCqlFunction__toTimestamp

나는 카산드라와 함께 그래서 이것은 어쩌면 바보 같은 질문 새로운 해요 그냥 해 얻을 찾을 수 없습니다.

답변

3

금고 방법은 시간 소인을 반환하고 클라이언트 측에서는 분석합니다.

기본적으로 카산드라는이 문제를 해결할 수있는 기능이 없습니다. 그러나이를 수행하기 위해 사용자 정의 함수 (UDF)를 작성할 수 있습니다.

먼저 사용자 정의 함수는 기본적으로 사용 불가능합니다. cassandra.yaml에서 설정을 조정하고 노드를 다시 시작해야합니다.

enable_user_defined_functions=true 

참고 :이 설정은 이유 때문에 기본값이됩니다. Cassandra 3.x는 악의적 인 코드로부터 보호 할 수있는 몇 가지 안전 장치가 있지만, 필요할 때와 수행중인 것을 알지 않는 한이 코드를 꺼 두는 것이 좋습니다. 그렇다면 정의 된 UDF를 계속 관찰하고 싶을 것입니다.

지금은 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);'; 

참고 현재 날짜/시간 조회하는 방법 (및 유형)의 수 있다는 것을 :

[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) 

SELECT stackoverflow.year(todate(now())) as year FROm system.local; 

year 
------ 
2017 

(1 rows) 
:

단지 만 년을 되돌리려면, 나는 todate(now()) 열에 내 year 함수를 호출 할 수 있습니다

관련 문제