2017-09-20 1 views
1

Je migre des données de fichiers csv SQL (1 par table) vers une base de données Cassandra qui utilise un format prédéfini et standardisé. Par conséquent, je fais des transformations, des jointures, etc. sur les données SQL pour l'obtenir correspondant à ce format avant de l'écrire sur Cassandra. Mon problème est que cette migration db se passe par lots (pas tous en même temps) et je ne peux pas m'assurer que les informations des côtés multiples d'une table seront présentes lors de l'écriture d'une entrée dans Cassandra.Scala Spark Cassandra mise à jour ou insertion de lignes sur la correspondance de clé primaire

ex. Le tableau 1 et le tableau 2 ont tous deux les clés de partitionnement et de mise en cluster (autorisant la jointure car leur combinaison est unique) et sont joints à l'aide d'une jointure externe complète. Avec la façon dont nous recevons des données, cependant, il est possible que nous puissions obtenir un enregistrement du tableau 1 mais pas du tableau 2 dans un «lot» de données. Quand j'effectue la jointure externe complète, aucun problème ... les colonnes supplémentaires de l'autre table sont ajoutées et juste remplissent avec des nulls. Sur l'intervalle suivant où j'obtiens des données, je reçois ensuite la partie de la table 2 qui aurait dû être jointe au tableau 1.

Comment puis-je combiner ces entrées?

J'ai recherché une méthode de mise à jour ou de type d'insertion dans Spark selon que cet ensemble de clés de partitionnement et de cluster existe, mais n'a rien trouvé. Est-ce le moyen le plus efficace? Devrai-je simplement ajouter chaque entrée avec la requête spark.sql, puis mettre à jour/écrire?

Remarque: l'utilisation d'uuids qui empêcheraient le conflit de clé primaire ne résoudra pas le problème, je ne souhaite pas 2 entrées partielles. Toutes les données avec cette clé primaire particulière doivent être dans la même rangée.

Merci pour toute aide que vous pouvez fournir!

Répondre

1

Je pense que vous devriez être en mesure d'écrire directement les données sur Cassandra sans avoir à vous en soucier, en supposant que toutes les clés primaires sont les mêmes.

Les insertions de Cassandra sont vraiment "insérer ou mettre à jour" donc je crois que lorsque vous insérez un côté d'une jointure, il va juste laisser certaines colonnes vides. Ensuite, lorsque vous insérez l'autre côté de la jointure, il met à jour cette ligne avec les nouvelles colonnes. Prenez ceci avec un grain de sel, car je n'ai pas de grappe Spark + Cassandra à tester et à vérifier.

+0

Toutes les écritures sont correctes même dans le connecteur Spark Cassandra. Les exécutions suivantes remplaceront simplement les entrées existantes. – RussS