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.
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",
}
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"
}
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();
});
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. –