2016-08-08 3 views
0

Je veux définir TTL 30 jours à partir du champ de temps de l'enregistrement de table (ID, nom, heure) lors de l'insertion. Pour cela, je suis création d'une fonction définie par l'utilisateur (UDF) bigint fun(rTime,cTime) commeréglage TTL en utilisant timestamp champ d'enregistrement lors de l'insertion dans cassandra

CREATE FUNCTION fun(rtime timestamp,ctime timestamp) CALLED ON NULL INPUT 
RETURNS bigint LANGUAGE java as 'return 2592000-((ctime.toTime() -rtime.toTime())/1000);'; 

ici, fonction fun calcule le temps en secondes ces données doivent vivre. 2592000 est le temps en secondes pendant 30 jours.

Maintenant, je suis en train d'utiliser la fonction ci-dessus pour le réglage TTL comme

INSERT INTO record(id,name,time) VALUES (123,'data123','2016-08-08 06:06:00') 
USING TTL fun('2016-08-08 06:06:00',totimestamp(now())); 

obtenir erreur

Syntaxe Exception: code ErrorMessage = 2000 ........

Existe-t-il un autre moyen de définir ttl en fonction du champ d'heure d'enregistrement. Quel est le problème avec l'approche ci-dessus?

Répondre

1

L'appel de fonction n'est pas pris en charge dans la clause USING. Dans votre cas, votre client doit calculer le TTL approprié et le transmettre dans la requête en tant que seconde.