2017-09-07 3 views
1

Je suis en train d'avoir une écriture d'une requête telle quemise à jour ou insertion basée sur l'horodatage

  1. insérer une nouvelle ligne si la clé primaire ne correspond pas à une rangée
  2. si correspondre à une rangée, seulement valeur de mise à jour si l'horodatage fourni est postérieure à la valeur de la colonne LastTimestamp

la lutte ici (corrigez-moi si je me trompe) est que je ne peux pas utiliser intégré la fonctionnalité « USE tIMESTAMP » Cassandra car l'horodatage fourni par le La requête est presque certainement inférieure à l'horodatage par défaut lorsque créer une nouvelle ligne, par conséquent, il ne sera pas en mesure de créer une nouvelle ligne.

Par conséquent, je ne peux créer qu'une nouvelle colonne pour stocker l'horodatage. Ensuite, j'ai une condition OU à remplir: "if lastTimestamp == null OU lastTimestamp < timestamp", mais malheureusement Cassandra ne supporte pas la logique "OR" dans la clause IF. Une autre possibilité que je peux penser est, je vais toujours créer une nouvelle ligne en ayant "INSERT IF NOT EXIST", et remplir lastTimestamp = 0. Ensuite, appliquez l'opération "update if timestamp is greater". Mais ceci est essentiellement deux écrire plus d'un. Toute autre solution possible?

+0

Pouvez-vous nous fournir une Exemple ? –

Répondre

0

Lors de l'insertion/la mise à jour/la suppression, vous devez spécifier l'horodatage en microsecondes.

Une façon simple de le faire est de multiplier votre horodatage en millisecondes avec 1000

Exemple:

INSERT INTO data(id, map) VALUES('123-123-12321', {'object2' : {value : '2', timestamp : '2017-09-09 16:24:06.197000+0000'}}) USING TIMESTAMP 1504952646912000; 

Ici 1504952646912000 est l'horodatage en microsecondes converti à partir 1504952646912 millisecondes