2017-06-08 2 views
0

J'ai une fonction lambda dans Node.js qui me permet d'écrire dans une base de données Apache Cassandra.Fonction lambda qui écrit des données à partir du document JSON dans Apache Cassandra

Je génère des requêtes à partir d'un document JSON événement, en récupérant les champs.

Dans Cassandra, il n'est pas possible de créer une table alter si la colonne n'existe pas. Donc, je fais une table alter pour toutes les colonnes en ignorant l'erreur, l'insertion est faite pour les éléments JSON la première fois.

enter image description here

Le problème se pose quand je veux modifier le JSON et ajouter des champs.

Le problème est que je ne peux insérer dans ma table que le dernier élément du document JSON que j'ajoute. Exemple:

{ 
 
"humidte" : 18.75, 
 
"temperature" : 14.45, 
 
}

Et je veux ajouter un autre champ à la fin comme ceci:

{ 
 
"humidte" : 18.75, 
 
"temperature" : 14.45, 
 
"air" : "fait", 
 
}

enter image description here

Voilà, c'est fait.

Mais si j'insère un élément dans mon document JSON au milieu ou au début comme celui-ci:

{ 
 
"humidte" : 18.75, 
 
"air" : "fait", 
 
"temperature" : 14.45, 
 
"topic" : "sk1_000/data" 
 
}

Il y a l'erreur suivante: enter image description here

Et Je n'ai pas ma nouvelle colonne.

Voici une partie de mon code où je fais la table alter, et l'insertion. J'utilise async. Comment puis-je continuer à modifier mon JSON et ajouter des tables comme je veux dans Cassandra à partir de mon document JSON?

var keys = Object.keys(event); 
var q = async.queue(function (x, callback) { 
            x = client.execute (queryadd, { prepare: true }, function (err) { 
              console.log(err); 
              callback(); 

            }); 
      }, Infinity); 



         for(var i = 0; i < keys.length; i++) { 

         var queryadd1 = "ALTER TABLE " 
         var queryadd2 = " ADD " 
         var queryadd = queryadd1 + ' ' + keyspace + '.' + table + queryadd2 + '(' + keys[i] + ' ' + typeLabel(event[keys[i]]) + ')'; 
         console.log(queryadd); 
         q.push(console.log(queryadd)); 
         } 



      q.drain = function() { 

            var queryinsert1 = "INSERT INTO " 
            var queryinsert2 = "(nom_entreprise, date_serveur" 
            var queryinsert3 = "VALUES ('"+ keyspace +"', '"+ Date.now() +"'" 
            var queryinsert4 = "if not exists " 
            var queryinsert = queryinsert1 + keyspace +'.'+ table + queryinsert2 + donnees + ') ' + queryinsert3 + valeurs + ') ' + queryinsert4 + ';'; 
            console.log(queryinsert); 
            client.execute(queryinsert, { prepare: true }, function (err) { 
            console.log(err); 
            client.shutdown(); 

            }); 

Répondre

0
const query = 'INSERT INTO my_table (nom_entreprise, date_serveur, other_column)' + 
    ' VALUES (?, ?, ?)'; 
client.execute(query, [ name, new Date(), otherField ], { prepare: true }, callback); 
+0

Bien que ce code peut répondre à la question, en fournissant étoffent comment et/ou pourquoi il résout le problème améliorerait la valeur à long terme de la réponse. –