web-dev-qa-db-fra.com

Comment faire une requête de jointure avec 2 tables ou plus dans cassandra cql

Je suis nouveau à Cassandra. Ici, j'ai deux tables EVENTS et TOWER. Je dois les rejoindre pour certaines requêtes. Mais je ne suis pas en mesure de le faire.

Structure de la table EVENTS:

eid int PRIMARY KEY,
a_end_tow_id text,
a_home_circle text,
a_home_operator text,
a_imei text,
a_imsi text,

Structure de la table TOWER:

 tid int PRIMARY KEY,
 tower_address_1 text,
 tower_address_2 text,
 tower_azimuth text,
 tower_cgi text,
 tower_circle text,
 tower_id_no text,
 tower_lat_d text,
 tower_long_d text,
 tower_name text,

Maintenant, je veux joindre ces tables en ce qui concerne EID et TID afin de pouvoir récupérer les données des deux tables.

27
BlueShark

Cassandra = Pas de jointure. Votre modèle est 100% relationnel. Vous devez le repenser pour Cassandra. Je vous conseille de jeter un œil à ces diapositives . Ils approfondissent la façon de modéliser les données de cassandra. Voici également un webinaire couvrant le sujet. Mais arrêtez de penser aux clés étrangères et de joindre des tables, car si vous avez besoin de relations cassandra n'est pas l'outil pour le travail.

Mais pourquoi?
Parce qu'alors vous devez vérifier la cohérence et faire bien d'autres choses que les bases de données relationnelles et vous perdez ainsi les performances et l'évolutivité qu'offre cassandra.

Que puis-je faire?
DÉNORMALISER! Beaucoup de données dans une table? Mais la table aura trop de colonnes!
Alors? Cassandra peut gérer un très grand nombre de colonnes dans une table.

L'autre chose que vous pouvez faire est de simuler la jointure dans votre application cliente. Faites correspondre les deux ensembles de données dans votre code, mais cela sera très lent car vous devrez répéter toutes vos informations.

Une autre façon consiste à exécuter plusieurs requêtes. Sélectionnez l'événement souhaité, puis la tour correspondante.

61
Lyuben Todorov

Il existe deux façons de joindre des tables dans Cassandra et de les interroger. Mais bien sûr, vous devez repenser la partie du modèle de données.

  1. Utilisez SparkSQL d'Apache Spark ™ avec Cassandra (open source ou dans DataStax Enterprise - DSE).
  2. Utilisez DataStax fourni ODBC connecteurs avec Cassandra et DSE.
5
Mayank Raghav

PlayOrm est une bonne option pour effectuer des jointures sur des systèmes évolutifs avec un langage SQL évolutif spécial dans lequel vous pouvez joindre des partitions (c'est-à-dire que vous ne voulez jamais joindre 1 milliard de lignes à un autre milliard de lignes). Il a des tonnes de modèles noSQL et est une rupture complète entre l'hibernation et JPA pour imiter les modèles noSQL avec des jointures côté client en cas de besoin.

0
Dean Hiller