0% ont trouvé ce document utile (0 vote)
42 vues5 pages

Travaux Pratiques Cassandra : Restaurants

Ce document présente un travail pratique sur l'utilisation de Cassandra pour créer une base de données de restaurants et d'inspections. Il décrit les étapes pour lancer Cassandra via Docker, créer un Keyspace et des tables, importer des données à partir de fichiers CSV, et effectuer des requêtes CQL. L'objectif final est de gérer une base de données capable de traiter de grandes volumétries d'informations.

Transféré par

Bob Ayoub
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
42 vues5 pages

Travaux Pratiques Cassandra : Restaurants

Ce document présente un travail pratique sur l'utilisation de Cassandra pour créer une base de données de restaurants et d'inspections. Il décrit les étapes pour lancer Cassandra via Docker, créer un Keyspace et des tables, importer des données à partir de fichiers CSV, et effectuer des requêtes CQL. L'objectif final est de gérer une base de données capable de traiter de grandes volumétries d'informations.

Transféré par

Bob Ayoub
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Cassandra

Travaux Pratiques
Les exercices qui suivent sont à effectuer sur machine, avec Cassandra.
Après avoir lancé votre machine Cassandra (avec docker), vous pourrez
également interagir en ligne de commande avec cqlsh avec la
commande :

docker run -d --name cassandra-docker -p 9842:9842 cassandra


# Cette commande crée et démarre essentiellement un conteneur à partir de
l'image Cassandra avec le nom "cassandra-docker", et l'héberge sur le port
9842.
docker exec -it cassandra-docker bash
cqlsh
# ceci suppose que cassandra-docker est le nom de votre container
# it pour disposer d'un terminal interactif persistant
# cqlsh pour lancer cette commande au démarrage

L’objectif de ces travaux pratiques est la mise en place d’une base


de données représentant des restaurants, et des inspections de ces
restaurants.
Note
Avant de vous lancer dans le travail proprement dit, vous êtes
invités fortement à prendre le temps d’ouvrir cette archive zip et
d’en examiner le contenu (au moins les en-têtes, pour avoir une
première idée de la structure des données initiales).
Bien entendu, on supppose qu’à terme cette base contiendra tous
les restaurants du monde, et toutes les inspections, ce qui justifie
d’utiliser un système apte à gérer de grosses volumétries.
Partie 1: Approche relationnelle
Nous allons étudier ici la création d’une base de données
(appelée Keyspace), puis son interrogation. Cette première phase
du TP consiste à créer la base comme si elle était relationnelle, et
à effectuer des requêtes simples. Une fois les limites atteintes, nous
utiliserons les spécificités de Cassandra pour aller plus loin.

Création de la base de données


Avant d’interroger la base de données, il nous la créer. Pour
commencer:
CREATE KEYSPACE IF NOT EXISTS resto_NY WITH REPLICATION = { 'class' :
'SimpleStrategy', 'replication_factor': 1};

CASSANDRA TP2 | PR. SAIDA ELMENDILI 1


Nous créons ainsi une base de données resto_NY pour laquelle le
facteur de réplication est mis à 1.
Sous cqlsh, vous pouvez maintenant sélectionner la base de
données pour vos prochaines requêtes.
USE resto_NY;

Tables
Nous pouvons maintenant créer les tables (Column Family pour
Cassandra) Restaurant et Inspection à partir du schéma suivant :
CREATE TABLE Restaurant (
id INT, Name VARCHAR, borough VARCHAR, BuildingNum VARCHAR, Street
VARCHAR,
ZipCode INT, Phone text, CuisineType VARCHAR,
PRIMARY KEY ( id )
) ;

CREATE INDEX fk_Restaurant_cuisine ON Restaurant ( CuisineType ) ;

CREATE TABLE Inspection (


idRestaurant INT, InspectionDate date, ViolationCode VARCHAR,
ViolationDescription VARCHAR, CriticalFlag VARCHAR, Score INT, GRADE
VARCHAR,
PRIMARY KEY ( idRestaurant, InspectionDate )
) ;

CREATE INDEX fk_Inspection_Restaurant ON Inspection ( Grade ) ;

Nous pouvons remarquer que chaque inspection est liée à un


restaurant via l’identifiant de ce dernier.
Pour vérifier si les tables ont bien été créées (sous cqlsh).

DESC Restaurant;
DESC Inspection;

Nous pouvons voir le schéma des deux tables mais également des
informations relatives au stockage dans la base Cassandra.

Import des données

Maintenant, nous pouvons importer les fichiers CSV pour remplir


les Column Family :
1. Décompresser le fichier “[Link]” (il contient
le fichier “[Link]” et
“restaurants_inspections.csv”)

Note

CASSANDRA TP2 | PR. SAIDA ELMENDILI 2


En mode console, sur le répertoire de téléchargement du
fichier [Link], il suffit de mettre la commande :
unzip [Link]

2. Importer un fichier CSV :


▪ Dans votre console (machine locale, pas docker), copier
les fichiers sous « Docker » (container “Cassandra”)
▪ docker cp path-to-file/[Link] docker-
container-ID:/
▪ docker cp path-to-file/restaurants_inspections.csv
docker-container-ID:/

Note
Le chemin « path-to-file » correspond à l’endroit où a été
décompressé le fichier [Link]

Le docker-container-ID peut être récupéré grâce à la


commande « docker ps ».

Le container-ID est : ba1040313a70

Exemple :
docker cp C:/restaurants/[Link]
ba1040313a70:/

docker cp
C:/restaurants/restaurants_inspections.csv
ba1040313a70:/

Note
Les fichiers sont copiés à la racine du container, si vous le
changez il faut l’impacter dans l’instruction précédente.
Vous pouvez vérifier l’existence des fichiers dans le
container avec :
ls /*.csv

Dans la console cqlsh, importer les fichiers “[Link]”


et “restaurants_inspections.csv”

CASSANDRA TP2 | PR. SAIDA ELMENDILI 3


use resto_NY ;
COPY Restaurant (id, name, borough, buildingnum, street,
zipcode, phone, cuisinetype)
FROM '/[Link]' WITH DELIMITER=',';
COPY Inspection (idrestaurant, inspectiondate,
violationcode,
violationdescription, criticalflag,
score, grade)
FROM '/restaurants_inspections.csv' WITH DELIMITER=',';

Pour vérifier le contenu des tables:


SELECT count(*) FROM Restaurant;
SELECT count(*) FROM Inspection;

Interrogation

Les requêtes qui suivent sont à exprimer


avec CQL (pour Cassandra Query Language) qui est fortement
inspirée de SQL.

CASSANDRA TP2 | PR. SAIDA ELMENDILI 4


Requêtes CQL
Pour la suite des exercices, exprimer en CQL les requêtes suivantes
:
1. Liste de tous les restaurants.
2. Liste des noms de restaurants.
3. Nom et quartier (borough) du restaurant N° 41569764.
4. Dates et grades des inspections de ce restaurant.
5. Noms des restaurants de cuisine Française (French).
6. Noms des restaurants situés
dans BROOKLYN (attribut borough).
7. Grades et scores donnés pour une inspection pour le
restaurant n° 41569764 avec un score d’au moins 10.
8. Grades (non nuls) des inspections dont le score est
supérieur à 30.
9. Utilisons les deux indexes
sur Restaurant (borough et cuisineType). Trouvez tous
les noms de restaurants français de Brooklyn.

CASSANDRA TP2 | PR. SAIDA ELMENDILI 5

Vous aimerez peut-être aussi