Vous êtes sur la page 1sur 94

Base de données NoSQL

◼Présentation de Cassandra
• Origine
✓ Initialement développé en interne par Facebook pour besoins de
sa messagerie interne
✓ 2008, Facebook offre Cassandra à la fondation Apache
✓ Sur site d’Apache http://cassandra.apache.org/ on trouve
◼ De nombreuses ressources via un WIKI et versions à télécharger
✓ Principaux contributeurs au projet Cassandra sont de DataStax
✓ Utilisateurs de Cassandra : Netflix, Spotify, eBay ou Twitter
◼ Liste non exhaustive disponible sur le site de DataStax
◼ http://planetcassandra.org/Company/Viewcompany?IndustryId=-1

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 1


Base de données NoSQL
◼Présentation de Cassandra
• Architecture de Cassandra
✓ Cluster
◼C’est un regroupement de plusieurs nœuds (serveur physique) qui
communiquent entre eux pour la gestion des données
Exemple d’un cluster Cassandra à 5 nœuds. Les nœuds
communiquent entre eux par un protocole peer-to-peer
qu’on appelle le Gossip (bavardage)

- C’est une base de données contenu dans un cluster


- Les données sont réparties sur plusieurs nœuds et
peuvent être répliquées sur 1 à N nœuds
- Un utilisateur peut se connecter sur n’importe quel
nœud et accéder à l’ensemble des données

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 2


Base de données NoSQL
◼Présentation de Cassandra
• Architecture de Cassandra
✓ Théorème de CAP
◼ En bases de données NoSQL, théorème de CAP établit 3 paramètres sur
lesquels on peut jouer pour configurer une base de données distribuée :
◼ La cohérence (C pour Consistency)

◼ La disponibilité (A pour Availibility)

◼ La tolérance aux pannes et aux coupures réseaux (P pour Partition-

tolerance)
◼ Le théorème stipule que pour toute base de données, on ne peut choisir
que 2 de ces 3 paramètres, jamais les 3 en même temps.
◼ Cohérence et disponibilité (CA) donc non résistante aux pannes

◼ Cohérence et tolérance aux pannes (CP), non disponible à 100%

◼ Disponibilité et tolérance aux pannes (AP), non cohérente à 100%


3
(choix de Cassandra)
Base de données NoSQL
◼Présentation de Cassandra
• Architecture de Cassandra
✓ Architecture
◼ S’inspire de l’architecture de Big Table de Google, ainsi que de
l’architecture Dynamo de Amazon
◼ Moteur de stockage dérive directement de Big Table

◼ Couche de distribution de données a l’architecture de Dynamo

Les 3 couches métiers :


- API, permet de recevoir requêtes venant
de clients Thrift ou CQL3
- Dynamo, responsable de distribution des
données entre ≠ nœuds et du protocole
peer-to-peer
- Base de données, responsable de la
persistance des données sur disques
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 4
Base de données NoSQL
◼Présentation de Cassandra
• Principales caractéristiques
✓ Tolérance aux pannes
◼ Données d’un nœud automatiquement répliquées vers d’autres nœuds
◼ Terme facteur de réplication désigne nombre de nœuds où la donnée est
répliquée
◼ Terme de cluster désigne un groupe d’au moins deux nœuds
◼ Un data center représente des clusters délocalisés
✓ Décentralisé
◼ Dans un cluster tous les nœuds sont égaux : pas de maitre, ni esclave, ni
processus en charge de gestion, ni goulet d’étranglement niveau réseau
◼ Protocole GOSSIP utilisé pour découvrir la localisation et les
informations sur l’état des nœuds d’un cluster
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 5
Base de données NoSQL
◼Présentation de Cassandra
• Principales caractéristiques
✓ Modèle de données riche
◼ Modèle de données proposé par Cassandra est basé sur la notion de
clé/valeur permet de développer de nombreux cas dans le monde Web
✓ Élastique
◼ La scalabilité est linéaire. Le débit d’écriture et de lecture augmente de
façon linéaire lors d’ajout de nouveau serveur dans le cluster
◼ Cassandra assure qu’il n’y a pas d’indisponibilité du système ni
d’interruption au niveau des applications
✓ Haute disponibilité
◼ Possibilité de spécifier niveau de cohérence concernant lecture/écriture
◼ C’est le « Tuneable Consistency »
◼ Pas de transaction, l’écriture des données est très rapide 6
Base de données NoSQL
◼Présentation de Cassandra
• Modèle de données
✓ Généralités
◼ Données regroupées dans des familles de colonnes (column families)
◼ Conception du modèle de données en fonction des requêtes à faire
◼ La manière d’écrire des données permettra d’assurer meilleure lecture
◼ Données stockées dans une suite triée de couple clé/valeur ( car
initialement basée sur Big Table de Google)
◼ Cassandra est classée comme une base de données NoSQL orientée
colonne sans aller jusqu’au stockage physique en colonne
✓ Colonne
◼ Plus petite unité du modèle de données Cassandra : triplet contenant un
nom, une valeur et un timestamp (sert à déterminer maj la plus récente)
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 7
Base de données NoSQL
◼Présentation de Cassandra
• Modèle de données
✓ Colonne
◼ La taille du nom peut aller jusqu’à 64KO
◼ La valeur peut contenir 2 GO de données
◼ Valeur pas obligatoire, omission peut conduire à amélioration de
performance.
◼ Nom de colonne peut être considéré comme valeur : figure de gauche,
nom de la colonne contient le nom de l’utilisateur et un score

Case valeur peut contenir


plusieurs valeurs

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 8


Base de données NoSQL
◼Présentation de Cassandra
• Modèle de données
✓ Colonne
◼ Une colonne a un type appelé comparator
◼ Une valeur a également un type appelé validator
◼ Tableau des différents types : type natif utilisé en interne et type utilisé
par le langage CQL (Cassandra Query Language)

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 9


Base de données NoSQL
◼Présentation de Cassandra
• Modèle de données
✓ Line
◼ Composée d’un ensemble de colonnes. Elle est identifiée par une clé
◼ Clé peut contenir jusqu’à 64 KO de données et 2 milliards de colonnes
◼ Possibilité d’utiliser des colonnes comme clé primaire

2 lignes dont le nombre de colonnes n’est pas identique

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 10


Base de données NoSQL
◼Présentation de Cassandra
• Modèle de données
✓ Famille de colonnes (Column Family)
◼ C’est un regroupement logique de lignes
◼ C’est en quelque sorte une table dans le relationnel

◼ 2 types de familles de colonnes : statique et dynamique


◼ définition familles de colonnes, spécification de nom et type de colonne
◼ C’est lors de l’ajout d’une ligne que l’on choisit les colonnes à exploiter
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 11
Base de données NoSQL
◼Présentation de Cassandra
• Modèle de données
✓ Keyspace
◼ C’est un regroupement de famille de colonnes  schéma dans le
monde des bases de données relationnelles

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 12


Base de données NoSQL
◼Présentation de Cassandra
• Modèle de données
✓ Quand utiliser Cassandra?
◼ En cas de problématique de charge, de volume et de besoins de très
haute disponibilité
◼ Cas d’utilisation sont très nombreux
◼ Timeseries :où les données sont stockées suivant des timestamps

nom de la colonne utilisée comme timestamp et valeur contiendrait


les données. Logs ou valeurs issues de capteurs
◼ Clickstreams : enregistrement des actions d’un utilisateur sur

application

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 13


Base de données NoSQL
◼Présentation de Cassandra
• Modèle de données
✓ Dénormalisation
◼ Soit la relation 1 à plusieurs dans un monde normalisé :

La jointure n’étant pas possible, on


dénormalise la relation

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 14


Base de données NoSQL
◼Présentation de Cassandra
• Modèle de données
✓ Dénormalisation
◼ Soit la relation plusieurs à plusieurs :

On veut retrouver tous les


commentaires d’un utilisateur et
tous les commentaires d’un livre

On dénormalise en 2 tables

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 15


Base de données NoSQL
◼Présentation de Cassandra
• Modèle physique de données
✓ Keyspaces et Tables
◼ Dans cluster Cassandra, on trouve des tables et des keyspaces
◼ Keyspace peut être vu comme une base un schéma

◼ À l’intérieure de chaque keyspace, on trouve des tables (même

signification que dans le SQL avec des lignes et des colonnes)

◼ Terminologie table est apparue avec CQL3, Column Family avant


✓ Partitions, colonnes et cellules
◼ Dans une table, données stockées sous forme de lignes et de colonnes :
◼ Table visualisée comme : <clé de partition, <clé colonne, cellule>>

◼ Ici, clé de partition est désigné par #partition, clé de colonne #col
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 16
Base de données NoSQL
◼Présentation de Cassandra
• Modèle physique de données
✓ Partitions, colonnes et cellules
#partition Colonne Colonne Colonne Colonne Colonne ...
#col1 #col2 #col3
Partition1
cellule1 cellule2 cellule3
#col1 #col2
Partition2
cellule1
#col1 #col2 #col3 #col4 #col5
Partition3
cellule1 cellule3 cellule5
#col1 Les données sont disposées sur des lignes (qu’on appelle partition)
Partition4
cellule1 et au sein de chaque partition on a une série de colonnes avec
#col/cellule qu’on peut assimiler à une série de clé/valeur

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 17


Bases de données NoSQL -
Cassandra
◼Installation et configuration
• Téléchargement
✓ Peut se faire à partir du site d’Apache ou directement sur le site
de DataStax
◼ Via site d’Apache : http://cassandra.apache.org/
◼ solution minimale contenant que la base de données

◼ Fichier d’installation se limite à une archive ZIP

◼ Via le site DataStax: 2 distributions


◼ DataStax Entreprise Edition : payante, dernière version, outil

d’administration OpsCemtere et multitude de services


◼ DataStax Community Edition : gratuite, dernière version avec outil

d’administration OpsCenter

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 18


Bases de données NoSQL -
Cassandra
◼Installation et configuration
• Prérequis
✓ Nécessite machine virtuelle Java
◼ Variables d’environnement JAVA_HOME pointe sur répertoire du JDK
◼ Variable d’environnement PATH contient répertoire bin du JDK
✓ Nécessite Python pour l’exécution de cqlsh
◼ Installer Python
◼ Variable d’environnement PATH contient répertoire vers Python
◼ Les anciennes versions nécessitent Python 2.7
◼ Les versions de Cassandra au-delà de 4.0 nécessitent Python 3.6+
◼ Pour connaitre la version de Python installée, tapez à l’invite de
commande ceci : C:\.....>python --version

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 19


Bases de données NoSQL -
Cassandra
◼Installation et configuration
• Installation
✓ Décompression de l’archive dans
dossier par défaut
✓ Structure des répertoires est :

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 20


Bases de données NoSQL -
Cassandra
◼Installation et configuration
• Installation
✓ Structure des répertoires est :
◼ bin : contient scripts d’exécution. On y trouve :
◼ script de démarrage de Cassandra (cassandra.bat),

◼ script de démarrage client en ligne de commande (cassandra-

cli.bat)
◼ script Python pour le client CQL (cqlsh), avoir chemin du répertoire

Python dans variable d’environnement PATH


◼ script pour l’administration d’un cluster (nodetool.bat)

◼ conf : contient les fichiers de configuration. On y trouve :


◼ fichier cassandra.yaml dédié à la configuration de Cassandra

◼ fichier log4j-server.properties pour configuration de messages logs

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 21


Bases de données NoSQL -
Cassandra
◼Installation et configuration
• Installation
✓ Structure des répertoires est :
◼ interface : contient la configuration pour Thrift assurant
l’interopérabilité entre Apache Cassandra et les API clientes
◼ offre de connecteurs vers des clients de différents langages (C#,

PHP, Java, C++, …)


◼ javadoc : contient la JavaDoc de Cassandra
◼ lib : contient les bibliothèques nécessaires à l’exécution de Cassandra
◼ pylib : contient les bibliothèques Python pour Thrift
◼ tools : contient les outils tiers et notamment l’outil Cassandra-Stress
(cassandra-stress.bat) pour effectuer des benchmarks sur son cluster

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 22


Bases de données NoSQL -
Cassandra
◼Installation et configuration
• Configuration
✓ Variable d’environnement PATH
◼ Ajouter dans le PATH, le chemin du répertoire bin de Cassandra :
◼ Lancer l’explorateur de fichiers et aller dans le répertoire bin

◼ Copier le chemin par Ctrl+C

◼ Ouvrir la fenêtre des variables

d’environnement
◼ Ajouter à Path Variable Système le
chemin d’accès à bin de Cassandra

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 23


Bases de données NoSQL -
Cassandra
◼Installation et configuration
• Configuration
✓ Fichier conf/cassandra.yaml
◼ data_file_directories : précise où stocker les données; répertoire par
défaut $CASSANDRA_HOME/data/data
◼ commitlog_directory : dossier pour la validation des logs; répertoire par
défaut $CASSANDRA_HOME/data/commitlog
◼ saved_caches_directory : répertoire pour les données du cache;
répertoire par défaut $CASSANDRA_HOME/data/ saved_caches
◼ N.B. : s’assurer que ces répertoires existent et que l’écriture est
autorisée
✓ Créer une variable d’environnement CASSANDRA_HOME
◼ Définir sa valeur d’avec répertoire cassandra : apache-cassandra-3.11.13
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 24
Bases de données NoSQL -
Cassandra
◼Installation et configuration
• Configuration
✓ Démarrage Cassandra via invite de commande:
◼ Ouvrir cmd et taper : cassandra

◼ Lancer PowerShell en mode


Administrateur et taper ce qui suit:

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 25


Bases de données NoSQL -
Cassandra
◼Installation et configuration
• Configuration
✓ Démarrage Cassandra via invite de commande:
◼ Afficher à nouveau la liste de la politique d’exécution

◼ Télécharger et installer Microsoft Visual C++ 2010 Redistributable


◼ Ouvrir le fichier « cassandra-env.ps1 » et commenter la ligne 357

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 26


Bases de données NoSQL -
Cassandra
◼Installation et configuration
• Configuration
✓ Lancer le démarrage de cassandra
◼ taper cassandra à partir de l’invite de commande d’un cmd :

Cassandra démarre :
◼ Lancer cqlsh dans une autre
invite de commande cmd

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 27


Bases de données NoSQL -
Cassandra
◼Travaux pratiques N1
• Installer Cassandra sous Windows ou Linux

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 28


Bases de données NoSQL -
Cassandra
◼Exploitation
• L’outil cqlsh
✓ Outil basé sur Python permet manipulation des bases données
◼ Comme l’exécution se fait en local, les paramètres par défaut localhost
et port 9160 sont utilisés; possibilité de se connecter sur autre serveur
✓ Le langage CQL3
◼ CQL (Cassandra Query Language) est très proche du SQL standard du
point de vue syntaxe
◼ Différences CQL3/SQL
◼ Pas de jointures

o faire travail en amont sur la modélisation des tables


◼ Pas de group by
o Les agrégations sont gérées coté client
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 29
Bases de données NoSQL -
Cassandra
◼Exploitation
• L’outil cqlsh
✓ Le langage CQL3
◼ Différences CQL3/SQL
◼ Clause WHERE limitée

o Relation d’égalité (=) sur les clés de partition y compris clé de partition
composite
o Relation d’égalité (=) ou d’inégalité (<, , , >) sur les clés de colonne
◼ Clause ORDER BY limitée
o Utilisée uniquement sous certaines conditions (voir plus loin)
◼ Pas de contraintes
o Les contraintes d’intégrité/d’unicité telles qu’en SQL n’existent pas. Le
mot clé primary key ne permet que de spécifier la clé de partition

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 30


Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les Keyspaces
✓ Création : commande CREATE KEYSPACE
◼ Utilise une stratégie de placement ici 'SimpleStrategy' et un facteur de
réplication à 1 dans l’exemple
◼ Exple : create keyspace cassandraexpl with replication = { 'class' :
'SimpleStrategy', 'replication_factor' : 1};
◼ Utilisation d’un keyspace
◼ Use cassandraexpl;

◼ Stratégie de copie (réplication)


◼ SimpleStrategy : quand cluster composé d’un unique data-center

◼ NetworkTopologyStrategy : quand cluster est déployé sur plusieurs

data-centers
◼ replication factor : nombre de copie d’une donnée au sein des
31
nœuds du cluster
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les Keyspaces
✓ Interrogation
◼ Affichage de la liste des keyspaces disponibles d’une base de données
◼ Select * from system_schema.keyspaces;
✓ Modification / Suppression
◼ La modification permet de paramétrer certaines options comme la
stratégie de placement ou le facteur de réplication, mais pas le nom du
keyspace
◼ Alter keyspace cassandraexpl with replication ={'class':
'SimpleStrategy','replication_factor':2};
◼ Suppression
◼ Drop keyspace cassandraexpl;

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 32


Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les familles de colonnes (column family)
✓ Rappel :
◼ Une famille de colonnes peut être vue
comme une table en relationnel
✓ Indexation et clés
◼ Pour les SGBDR, on utilise clés
primaires pour:
◼ Accélérer l’accès aux données

◼ Garantir l’unicité d’un enregistre-


ment
◼ Ordonner les colonnes

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 33


Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les familles de colonnes (column family)
✓ Indexation et clés
◼ Pour les bases NoSQL :
◼ Un moyen d’accéder rapidement à une donnée est essentiel étant

donné le volume des données stockées


◼ Pour Cassandra, une famille de colonnes dispose de 2 index :
◼ Un index primaire : c’est l’index des clés de ses lignes
◼ C’est en analysant cet index nœud par nœud qu’une réponse

concernant les lignes d’une famille de colonnes sera trouvée


◼ Un index secondaire : c’est un index portant sur une colonne
◼ Permet d’appliquer des prédicats d’égalité sur cette colonne (ex : …

Where colonne X = y)
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 34
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les familles de colonnes (column family)
✓ Indexation et clés
◼ La Clé pour Cassandra :
◼ Peut être composée d’une ou plusieurs colonnes, la clé est alors

composée
◼ 1er élément d’1 clé composée, clé de partitionnement

◼ Les suivants sont les clés de cluster(isation)

◼ Clé de partitionnement : détermine sur quel nœud du cluster la donnée


sera stockée
◼ Clé de cluster(isation) : sert à ordonner les données sur un même nœud.
Possibilité d’avoir plusieurs clés de clusterisation pour une même table

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 35


Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les familles de colonnes (column family)
✓ Indexation et clés
◼ La Clé pour Cassandra :
◼ La clé d'une ligne est comme OID des SGBD RO. Permet de

trouver l'enregistrement
◼ Permet récupération rapide de données réparties sur +sieurs nœuds.

codée sur 128bits et représentée sous la forme de groupes de


caractères hexadécimaux en minuscule séparés par des tirets. Cette
clé d'enregistrement est de type uuid (Universal Unique IDentifier).
◼ Possibilité de définir clés primaires comme dans SGBDR. Dans ce
cas, 1ère colonne de la clé utilisée comme clé d'enregistrement (et
convertit). Les suivantes ne serviront qu'à s'assurer que
l'enregistrement est unique.
36
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les familles de colonnes (column family)
✓ Indexation et clés
◼ Indexation
◼ La clé de partition est un premier index et est requise

◼ La clé de clusterisation est un second index optionnel

◼ Les suivants sont les clés de cluster(isation)

◼ Exemple : avec ces clés et la répartition des hash ci-dessous, la ligne de


clé "toto" sera stockée dans le nœud A et celle de "titi" dans le nœud B

Clé de partitionnement Hash


toto -0269527892468975381
titi 3269527892468975381
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 37
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les familles de colonnes (column family)
✓ Indexation et clés
◼ Indexation

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 38


Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les familles de colonnes (column family)
✓ Indexation et clés
◼ Ordonnancement
◼ La clé de clusterisation permet d’utiliser « order by » sur ses

données une fois qu’on sait sur quel nœud se situe les données
◼ Soit la table :

Create table musique(id uuid, ordre_musique int, titre text, album text, artiste
text, primary key(id,ordr_musique));
◼ On peut faire la requête suivante :

Select * from musique where id= 62c36092-82a1-3a00-93d1-46196ee77204 order by


ordre_musique desc limit 50;
◼ Il faut d’abord trouver sur quel nœud se situe la donnée, d’où le

Where id = ….
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 39
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les familles de colonnes (column family)
✓ Création
◼ Création d’une famille de colonnes dans le cas statique
◼ Create Table Personnes ( Nom varchar, Prenoms varchar, age int,
adresse varchar, primary key(nom)) [if not exists];
◼ Une colonne peut être une collection, on a 3 types de collections :
◼ Set : stocker un groupe d’éléments qui seront restituer dans un

ordre (alphabétique, …)
◼ List : pour des éléments dont l’ordre importe ou si on doit stocker

la même valeur plusieurs fois


◼ Map : stocker des pairs d’éléments <clé, valeur>

◼ Une colonne peut contenir un tuple :


◼ Nom_colonne Tuple<type1, type2, …>
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 40
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les familles de colonnes (column family)
✓ Création
◼ Création avec collections Set et List
◼ Create table entreprise( id uuid, nom varchar, email set<varchar>,
phone list<varchar>, primary key(id));
◼ Création avec collection Map
◼ CREATE TABLE equipe ( id UUID PRIMARY KEY, nom text,

prenoms text, teams map<int,text> );


◼ Création avec Tuple
◼ Create table route (race_id int, race_name text, point_id int,

lat_long tuple<text, tuple<float,float>>, primary key (race_id,


point_id));
◼ Create table nation_rank ( nation text primary key, info
41
tuple<int,text,int> );
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les familles de colonnes (column family)
✓ Interrogation
◼ Permet d’obtenir les métadonnées d’une table définie de manière
statique, On peut passer par le méta KEYSPACE system_schema
◼ Select column_name from system_schema.columns where

keyspace_name='cassandraexpl' and table_name='personnes’;


◼ On peut utiliser la commande describe :
◼ Describe cassandraexpl;

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 42


Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les familles de colonnes (column family)
✓ Modification
◼ Concerne : modifier le type de colonne, ajouter une colonne, supprimer
une colonne
◼ Alter table personnes add phone set<varchar>;
◼ Alter table personnes alter phone type int; # passe pas
◼ Alter table personnes drop phone;
◼ Alter table personnes rename nom to id; #valable pour colonnes de clés
✓ Suppression
◼ Drop columnfamily personnes;
◼ Drop Table personnes;

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 43


Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations d’import/export de données
✓ Importation de données à partir d’1 fichier csv dans 1 table
◼ Syntaxe :
◼ COPY table_name [ ( column_list ) ]
FROM 'file_name'[ , 'file2_name', ... ] | STDIN
[ WITH option = 'value' [ AND ... ] ]
◼ column_list : liste des colonnes de la table, si omis ttes les colonnes

◼ file_name1, file_name2 : fichiers au format csv

◼ option = value : quelques options et leur valeur

- DATETIMEFORMAT : format de lecture/écriture de date csv;


valeur par défaut : %Y-%m-%d %H:%M:%S%z
- DECIMALSEP : séparateur de decimal, défaut (.)
- DELIMITER : délimiteur de champ, défaut (,)
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 44
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations d’import/export de données
✓ Importation de données à partir d’1 fichier csv dans 1 table
◼ Syntaxe :
◼ option = value : quelques options et leur Valeur
- ESCAPE : caractère d’échappement, défaut (\)
- HEADER : à true 1ère ligne est entête (noms de colonnes)
✓ Exportation de données vers un fichier csv
◼ COPY table_name [ ( column_list ) ]
TO 'file_name' [ , 'file2_name', ... ] | STDOUT
[ WITH option = 'value' [ AND ... ] ]
✓ Exécution de fichier de commande
◼ SOURCE 'file_name'
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 45
Bases de données NoSQL -
Cassandra
◼Travaux pratiques N2
• Voir fiche de TP

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 46


Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les lignes
✓ Création : insertion de nouvelles lignes
◼ Insertion simple
◼ Insert into personnes (nom, prenoms, age, adresse) values

('ASSALE', 'Louis', 30, 'Yakro');


◼ Insertion avec collection Set et List
◼ Insert into entreprise(id, nom, mail, phone) values(uuid(), 'softtrain',

{'soft@soft.net', 'direct@soft.net' }, ['44777788', '47879477']);


◼ Insertion avec Map
◼ Insert into equipe (id, nom, prenoms, teams) values (uuid(), 'VOS',

'Marianne', {2015 : 'Rabobank-Liv Woman Cycling Team', 2014 :


'Rabobank-Liv Woman Cycling Team', 2013 : 'Rabobank-Liv
Giant', 2012 : 'Rabobank Women Team', 2011 : 'Nederland bloeit'
}); Big Data & NoSQL Cassandra 47
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les lignes
✓ Création : insertion de nouvelles lignes
◼ Insertion avec Tuple
◼ Insert into route (race_id, race_name, point_id, lat_long) values

(500, '47th Tour du Pays de Vaud', 2, ('Champagne', (46.833,


6.65)));
◼ INSERT INTO nation_rank (nation, info) VALUES ('Spain',

(1,'Alejandro VALVERDE' , 9054));


✓ Modification
◼ Modification simple
◼ Use cassandraexpl;

◼ Update personnes set prenoms = 'Adjé' where nom='ASSALE’ [if

exists] ;
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 48
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les lignes
✓ Modification
◼ Modification avec collection Set
◼ Update entreprise set email = email +{'oka@soft.net'} where id=

49b49328-274c-40c8-8fc7-c2ea2d0b525d; //ajout d’élément dans


un Set
◼ Update entreprise set email = email –{'direct@soft.net'} where id=

49b49328-274c-40c8-8fc7-c2ea2d0b525d; //retrait d’élément d’un


Set
◼ Update entreprise set email = {} WHERE id = 49b49328-274c-

40c8-8fc7-c2ea2d0b525d; // supprime tous les éléments d’un Set

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 49


Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les lignes
✓ Modification
◼ Modification avec collection List
◼ Update entreprise set phone = phone + ['54674362','35354267']

where id= 49b49328-274c-40c8-8fc7-c2ea2d0b525d; //ajout


d’élément dans une Liste
◼ Update entreprise set phone = phone - ['35354267'] where id=

49b49328-274c-40c8-8fc7-c2ea2d0b525d; //retrait d’élément d’une


Liste
◼ Update entreprise set phone[1]= '35354267' where id= 49b49328-

274c-40c8-8fc7-c2ea2d0b525d; // insertion à une position spécifiée

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 50


Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les lignes
✓ Modification
◼ Modification avec collection Map
◼ Update equipe set teams = teams + {2009 : 'DSB Bank - Nederland

bloeit’} where id = f4c0eece-75d8-4f78-a7cc-a1ef20ab0e39; //


ajout d’un élément clé/Valeur à la collection Map
◼ update equipe set teams[2009] = 'Team DSB - Ballast Nedam'

where id = f4c0eece-75d8-4f78-a7cc-a1ef20ab0e39; //modification


d’un élément spécifique à partir de la clé
◼ update equipe set teams = teams - {2013, 2014} where id=

f4c0eece-75d8-4f78-a7cc-a1ef20ab0e39; // suppression d’éléments


de la collection à partir de leur clé

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 51


Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les lignes
✓ Suppression
◼ Suppression de lignes de la table
◼ Delete from personnes where nom='ASSALE’;

◼ Suppression de tous les éléments d’un Set


◼ Delete email from entreprise where id = 49b49328-274c-40c8-

8fc7-c2ea2d0b525d;
◼ Suppression d’un élément d’une liste à partir de l’indice
◼ Delete phone[2] from entreprise where id= 49b49328-274c-40c8-
8fc7-c2ea2d0b525d;
◼ Suppression d’un élément d’un Map à partir de la clé
◼ delete teams[2009] from equipe where id= f4c0eece-75d8-4f78-
a7cc-a1ef20ab0e39;
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 52
Bases de données NoSQL -
Cassandra
◼Travaux pratiques N3
• Voir fiche de TP

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 53


Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les lignes
✓ Interrogation
◼ Syntaxe :
◼ SELECT column_list | DISTINCT partition_key [ AS

output_name ]
FROM [keyspace_name.] table_name
[WHERE [primary_key_conditions] [AND ] [index_conditions]]
[GROUP BY column_name[,…]]
[ORDER BY PK_column_name (ASC|DESC)]
[LIMIT N | PER PARTITION LIMIT N) ]
[ALLOW FILTERING]
◼ DISTINCT partition_key : retournes les valeurs distinctes de la clé

de partition
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 54
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les lignes
✓ Interrogation
◼ Syntaxe :
◼ column_list : column_name | function_name( argument_list )

- nom de colonnes séparés par des virgules


- peut être des fonctions définies par l’utilisateur
- peut être des fonctions d’agrégats : count(col), Min(col),
◼ primary_key_conditions : condition de restriction sur clé de

partition ou clusterisation. Restriction necessaire pour chaque


partition de clé composée. Opérateurs supportés (=) et IN(valeur1,
valeur2, …)
- pour clé composée créer condition pour chaque partition séparée
par AND
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 55
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les lignes
✓ Interrogation
◼ Syntaxe :
◼ As output_name : renommage de colonne

◼ index_conditions : conditions sur colonnes indexées de la forme :

column_name operator value


◼ Exemple :
◼ SELECT rang, nom_cycliste AS nome

FROM rang_par_annee_et_nome
WHERE “nom_course" = 'Tour of Japan - Stage 4 - Minami >
Shinshu' AND annee_course = 2014;
◼ N.B. : l’opérateur logique OR n’est pas supporté dans Cassandra

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 56


Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les lignes
✓ Interrogation
◼ Opérateurs
Operator Description
= Column value exactly matches the specified value.
IN Equal to any value in a comma-separated list of values
>= Greater than or equal to the value.
<= Less than or equal to the value.
> Greater than the value.
< Less than the value.
Matches a value in any type of collection. Only use on indexed
CONTAINS
collections.
CONTAINS KEY Matches a key name in a map. Only use on maps with indexed keys.
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 57
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les lignes
✓ Restriction
◼ Recherche rapide d’information via clé de partition => le Where
s’applique sur la clé de partition
◼ Where sur une autre colonne indexée est possible
◼ Soit la table suivante :

Create table musique(id uuid, ordre_musique int, titre text, album


text, artiste text, primary key(id,ordr_musique));
◼ On crée index sur colonne artiste pour récupérer ttes les musiques :

Create Index on musique(artiste);


◼ Ainsi, pour obtenir les chansons d’un certain Daniel Balavoine

Select * from musique Where artiste = 'Daniel Balavoine’;


ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 58
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les lignes
✓ Restriction
◼ Pas d’index, utilisé mot clé : ALLOW FILTERING (peu performant)
◼ On aurait pu écrire sans créer d’index :

Select * from musique where ordre_musique=2 allow filtering;


✓ Restriction WHERE … IN
◼ Syntaxe : WHERE nom_colonne in (valeur1, valeur2, ..);
◼ Mais cela ne peut s’appliquer qu’à la clé de partition et la première
colonne de la clé de clusterisation
✓ Restriction sur les collections
◼ CONTAINS s’applique sur les collections
◼ CONTAINS KEY s’applique sur les collections map pour lesquelles la
clé a été indexée 59
Bases de données NoSQL -
Cassandra
◼Exploitation
• Opérations sur les lignes
✓ Restriction sur collections
◼ Exemple : soit la table suivante
CREATE TABLE contacts (id int PRIMARY KEY, firstName text, lastName text,
phones map<text, text>, emails set<text>);
CREATE INDEX ON contacts (firstName);
CREATE INDEX ON contacts (keys(phones)); // On utilise la fonction keys() pour
indexer les clés de la map "phones"
CREATE INDEX ON contacts (emails);
◼ On peut faire les restrictions suivantes :

SELECT * FROM contacts WHERE firstname = 'Benjamin';


SELECT * FROM contacts WHERE phones CONTAINS KEY 'office';
SELECT * FROM contacts WHERE emails CONTAINS 'Benjamin@oops.com';
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 60
Bases de données NoSQL -
Cassandra
◼Travaux pratiques N4
• Voir fiche de TP

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 61


Bases de données NoSQL -
Cassandra
◼Exploitation
• Type défini par l’utilisateur
✓ On crée un type pour gérer plusieurs champs
◼ Exemple : type voiture contenant : une marque – une année de
fabrication – un nombre de chevaux – une liste d’options
◼ Create type Voiture (marque varchar, annee int, nb_chevaux int,

options set<varchar>);
◼ On peut afficher les champs d’un type par : describe type voiture;
✓ Modification d’un type utilisateur
◼ On peut ajouter ou renommer un champ à l’aide de : ALTER TYPE
◼ ALTER TYPE <nom type> ADD <nom champ> <type de champ>;
◼ Alter type voiture add kilometrage int;

◼ Alter type voiture rename kilometrage to km;


ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 62
Bases de données NoSQL -
Cassandra
◼Exploitation
• Type défini par l’utilisateur
✓ Suppression de type : DROP TYPE <nom de type>;
◼ Exemple : Drop type voiture;
✓ Création de Table utilisant un type défini
◼ Soit la table Vehicule : create table vehicule (id uuid, proprio text, objet
frozen <voiture>, primary key(id, proprio)); // mot clé « FROZEN »
n’est plus nécessaire pour les versions supérieures à 3.6
✓ Insertion de données de type utilisateur
◼ On utilise un format proche de JSON
◼ Insert into vehicule (id, proprio, objet)values (uuid(), 'Assale',

{marque:'Toyota', annee:2010, nb_chevaux:13, options:{'clim',


'Toit ouvrant’}, km:220});
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 63
Bases de données NoSQL -
Cassandra
◼Exploitation
• Type défini par l’utilisateur
✓ Modification de données dans un type utilisateur
◼ Expl: modification du nombre de chevaux du proprio Assale
◼ Update vehicule set objet.nb_chevaux=9 where proprio='Assale';
valable pour les types non-gélés (où frozen n’a pas été spécifié)

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 64


Bases de données NoSQL -
Cassandra
◼Exploitation
• Vue matérialisée
✓ Définition
◼ Table construite à partir des données d’une autre table avec une
nouvelle clé primaire et de nouvelles propriétés
◼ Les colonnes de la nouvelle clé primaire doivent inclure la colonne clé
primaire de la table d’origine et une autre colonne de la table d’origine
sur laquelle on désire faire de la restriction
✓ Syntaxe de création
◼ Soit la table suivante :
◼ Create table cycliste (cid uuid primary key, nom text, age int,

date_nais date, pays text);

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 65


Bases de données NoSQL -
Cassandra
◼Exploitation
• Vue matérialisée
✓ Syntaxe de création
◼ Vue matérialisée basée sur age :
◼ Create materialized view cycliste_age As Select age, date_nais,
nom, pays from cycliste where age is not null and cid is not null
primary key (age, cid);
◼ Vue matérialisée basée sur pays :
◼ Create materialized view cycliste_pays As Select age, date_nais,
nom, pays from cycliste where pays is not null and cid is not null
primary key (pays, cid);

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 66


Bases de données NoSQL -
Cassandra
◼Exploitation
• Vue matérialisée
✓ Modification
◼ Syntaxe:
◼ ALTER MATERIALIZED VIEW [keyspace_name.] view_name

[WITH table_options]
◼ Concerne uniquement les options
✓ Suppression
◼ Syntaxe
◼ DROP MATERIALIZED VIEW [IF EXISTS]

[keyspace_name.] view_name
◼ Exemple : drop materialized view cycliste_age;

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 67


Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonctions définies par l’utilisateur (UDF - User Defined
Function)
✓ Syntaxe :
◼ CREATE [OR REPLACE] FUNCTION [IF NOT EXISTS]
[keyspace_name.]function_name ( var_name
var_type [,...] )
[CALLED | RETURNS NULL] ON NULL INPUT
RETURNS cql_data_type
LANGUAGE language_name AS
'code_block’;
◼ var_name var_type : nom des arguments suivi de leur type. Le type est
tout type CQL3. les arguments pour la fonction peuvent être soit un
« littéral » au sens JSON, soit un terme
68
Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonctions définies par l’utilisateur (UDF)
✓ Syntaxe :
◼ CALLED ON NULL INPUT : exécute la fonction même si les valeurs
d’entrée sont nulles ou manquantes
◼ RETURNS NULL ON NULL INPUT : n’exécute pas le code en cas
d’entrée null; retourne null
◼ RETURNS cql_data_type : type cql3 retourné par la fonction
◼ LANGUAGE Language_name : java ou javascript
◼ 'Code_block' ou $$Code_block$$ : le code doit être encadré par de
simple quote (') ou double dollar ($$)
✓ La prise en compte se fait dans fichier cassandra.yaml par :
◼ enable_user_defined_functions: true
◼ enable_scripted_user_defined_functions: true 69
Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonctions définies par l’utilisateur (UDF)
✓ Exemples :
◼ Exemple 1 : Fonction retournant le logarithme d’une valeur passée en
paramètre. Elle s’exécute même s’il n’y a pas de valeur d’entrée
◼ Create or replace leLog(input double)

called on NULL input


returns double language java AS
'returnDouble.valueOf(Math.log(input.doubleVa
lue()));';

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 70


Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonctions définies par l’utilisateur (UDF)
✓ Exemples :
◼ Exemple 2 :Fonction retournant les N premiers caractères d’une chaine
passé en premier paramètre. La fonction n’est pas exécutée s’il n’y a pas
de valeur d’entrée
◼ Create function if not exists gauche(column

text,num int)
returns null on null input returns text
language javascript as
$$ column.substring(0,num) $$;

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 71


Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonction d’Agrégat définie par l’utilisateur (UDA)
✓ Comment simuler le « GROUP BY »
◼ Concept de Map/Reduce pour le NoSQL
◼ Programme décomposé en 2 parties : filtrage + regroupement

◼ Map : prend une ligne et produit une clé/valeur en sortie

◼ Reduce : prend une clé (provenant du Map) avec la liste de Valeur

et produit une valeur en sortie (pour la clé)


◼ Sous Cassandra
◼ Définition des fonctions Map et Reduce appelées User Defined

Function (UDF)
◼ Définition de function d’agrégat appelée User Defined Aggregate

(UDA)
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 72
Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonction d’Agrégat définie par l’utilisateur (UDA)
✓ Création d’agrégat par l’utilisateur (UDA – User Defined
Aggregate)
◼ Principe : exécute une fonction UDF sur chaque ligne d’un ensemble de
données, optionnellement exécute une fonction finale UDF sur
l’ensemble des résultats et retourne une valeur
◼ Syntaxe :
◼ CREATE [OR REPLACE] AGGREGATE [IF NOT EXISTS]
keyspace_name.aggregate_name ( cql_type )
SFUNC udf_name
STYPE cql_type
FINALFUNC udf_name
INITCOND [value]
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 73
Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonction d’Agrégat définie par l’utilisateur (UDA)
✓ Création d’agrégat par l’utilisateur (UDA)
◼ Syntaxe :
◼ cql_type : spécifie le type retourné par la function d’agrégat

◼ SFUNC udf_name : spécifie un user defined function (UDF).

Appelle la function d’état SFUNC sur chaque ligne


- le 1er paramètre dans SFUNC est le paramètre d’état
- la valeur retournée par la function est assignée au paramètre
d’état, lequel est passé pour le prochain appel
- on peut passer +sieurs valeurs en utilisant une collection ou tuple
◼ STYPE cql_type : le type CQL du paramètre retourné par la

function d’état

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 74


Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonction d’Agrégat définie par l’utilisateur (UDA)
✓ Création d’agrégat par l’utilisateur (UDA)
◼ Syntaxe :
◼ FINALFUNC udf_name : une udf exécutée sur les valeurs finales
dans le paramètre d’état
◼ INITCOND [value] : définir la condition initiale, valeurs, du 1er

paramètre dans SFUNC.


◼ Exemple : creation de la table equipe_Moyenne
◼ CREATE TABLE equipe_moyenne ( nom_equipe text,

nom_cycliste text, temps_cycliste_sec int, titre_course text,


PRIMARY KEY (nom_equipe, titre_course, nom_cycliste));

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 75


Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonction d’Agrégat définie par l’utilisateur (UDA)
✓ Création d’agrégat par l’utilisateur (UDA)
◼ Exemple : insertion de données dans la table equipe_Moyenne
◼ INSERT INTO equipe_moyenne (nom_equipe, nom_cycliste,
temps_cycliste_sec, titre_course) VALUES ('UnitedHealthCare Pro
Cycling Womens Team','Katie HALL',11449,'Amgen Tour of
California Women''s Race presented by SRAM - Stage 1 - Lake
Tahoe > Lake Tahoe');
◼ INSERT INTO equipe_moyenne (nom_equipe, nom_cycliste,

temps_cycliste_sec, titre_course) VALUES ('UnitedHealthCare Pro


Cycling Womens Team','Linda VILLUMSEN',11485,'Amgen Tour
of California Women''s Race presented by SRAM - Stage 1 - Lake
Tahoe > Lake Tahoe');
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 76
Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonction d’Agrégat définie par l’utilisateur (UDA)
✓ Création d’agrégat par l’utilisateur (UDA)
◼ Exemple : insertion de données dans la table equipe_Moyenne
◼ INSERT INTO equipe_moyenne (nom_equipe, nom_cycliste,
temps_cycliste_sec, titre_course) VALUES ('UnitedHealthCare Pro
Cycling Womens Team','Hannah BARNES',11490,'Amgen Tour of
California Women''s Race presented by SRAM - Stage 1 - Lake
Tahoe > Lake Tahoe');
◼ INSERT INTO equipe_moyenne (nom_equipe, nom_cycliste,

temps_cycliste_sec, titre_course) VALUES ('Velocio-


SRAM','Alena AMIALIUSIK',11451,'Amgen Tour of California
Women''s Race presented by SRAM - Stage 1 - Lake Tahoe > Lake
Tahoe');
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 77
Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonction d’Agrégat définie par l’utilisateur (UDA)
✓ Création d’agrégat par l’utilisateur (UDA)
◼ Exemple : insertion de données dans la table equipe_Moyenne
◼ INSERT INTO equipe_moyenne (nom_equipe, nom_cycliste,
temps_cycliste_sec, titre_course) VALUES ('Velocio-SRAM','Trixi
WORRACK',11453,'Amgen Tour of California Women''s Race
presented by SRAM - Stage 1 - Lake Tahoe > Lake Tahoe');
◼ INSERT INTO equipe_moyenne (nom_equipe, nom_cycliste,
temps_cycliste_sec, titre_course) VALUES ('TWENTY16
presented by Sho-Air','Lauren KOMANSKI',11451,'Amgen Tour of
California Women''s Race presented by SRAM - Stage 1 - Lake
Tahoe > Lake Tahoe');

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 78


Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonction d’Agrégat définie par l’utilisateur (UDA)
✓ Création d’agrégat par l’utilisateur (UDA)
◼ Exemple : création de la fonction (UDF) Map avec un tuple comme
paramètre d’état qui pour chaque ligne incrémente la valeur de la 1ère
position du tuple et ajoute la valeur de son 2nd paramètre à la 2nd
position du tuple (pour donner la valeur de la 2nd position du tuple)
◼ CREATE OR REPLACE FUNCTION etatMoy ( state

tuple<int,bigint>, val int )


CALLED ON NULL INPUT RETURNS tuple<int,bigint>
LANGUAGE java AS
$$ if (val !=null) { state.setInt(0, state.getInt(0)+1);
state.setLong(1, state.getLong(1)+val.intValue()); }
return state; $$;
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 79
Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonction d’Agrégat définie par l’utilisateur (UDA)
✓ Création d’agrégat par l’utilisateur (UDA)
◼ Exemple : test de la fonction (UDF) etatMoy
◼ CREATE TABLE test_moy ( id int PRIMARY KEY,

etat frozen<tuple<int, bigint>>, val int);


◼ INSERT INTO test_moy (id, etat, val) values

(1,(6,9949),51);
◼ INSERT INTO test_moy (id, etat, val) values
(2,(79,10000),9999);
◼ select etat, etatMoy(etat,val) , val from

test_moy;

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 80


Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonction d’Agrégat définie par l’utilisateur (UDA)
✓ Création d’agrégat par l’utilisateur (UDA)
◼ Exemple : création de la fonction (UDF) reduce qui divise la valeur
totale pour la colonne sélectionnée par le nombre de lignes
◼ CREATE OR REPLACE FUNCTION moyFinal ( state

tuple<int,bigint> )
CALLED ON NULL INPUT RETURNS double
LANGUAGE java AS
$$ double r = 0;
if (state.getInt(0) == 0) return null;
r = state.getLong(1);
r/= state.getInt(0);
return Double.valueOf(r);$$;
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 81
Bases de données NoSQL -
Cassandra
◼Exploitation
• Fonction d’Agrégat définie par l’utilisateur (UDA)
✓ Création d’agrégat par l’utilisateur (UDA)
◼ Exemple : création de la fonction d’agrégat qui calcule la valeur
moyenne pour chaque colonne
◼ CREATE AGGREGATE moyenne(int)

SFUNC etatMoy
STYPE tuple<int,bigint>
FINALFUNC moyFinal
INITCOND (0,0);
◼ On teste la fonction d’agrégat en utilisant un select
◼ SELECT moyenne(temps_cycliste_sec) FROM equipe_moyenne

WHERE nom_equipe='UnitedHealthCare Pro Cycling Womens


Team' AND titre_course='Amgen Tour of California Women''s
Race presented by SRAM - Stage 1 - Lake Tahoe > Lake Tahoe’;
Bases de données NoSQL -
Cassandra
◼Exploitation
• Création de déclencheurs (Trigger)
✓ Syntaxe :
◼ CREATE TRIGGER IF NOT EXISTS trigger_name
ON table_name USING 'java_class’
◼ Le déchencheur sur une table s’exécute avant que l’ordre CQL est lieu
◼ Placer le code du déclencheur (JAR) dans le répertoire des déclencheurs
sur chaque nœud. L’emplacement du répertoire des déclencheur dépend
de l’installation
◼ Sous windows : repertoire_installation/conf/triggers

◼ Sous linux : /etc/cassandra/triggers

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 83


Bases de données NoSQL -
Cassandra
◼Travaux pratiques N5
• Voir fiche de TP

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 84


Bases de données NoSQL -
Cassandra
◼Administration
• Configuration de l’authentification
✓ Procédure
◼ Changer l’option de « authenticator » dans fichier cassandra.yaml par :
◼ authenticator : PasswordAuthenticator

◼ Par défaut, il est à « AllowAllAuthenticator »

◼ Redémarrer cassandra
◼ Se connecter à cqlsh en utilisant le compte par défaut de super

utilisateur et son mot de pass :


c:\>cqlsh –u cassandra –p cassandra
◼ En situation distribuée, s’assurer que keyspace « system_auth » est tjrs
disponible en augmentant son facteur de réplication de 3 à 5 noeuds
◼ Alter keyspace "system_auth" With replication = {'class' :
'NetworkTopologyStrategy', 'dc1' : 3, 'dc2' : 2};
85
Bases de données NoSQL -
Cassandra
◼Administration
• Configuration de l’authentification
✓ Procédure
◼ Après l’augmentation du facteur de réplication d’un keyspace, propager
sur les autres nœuds par :
◼ C;\>nodetool repair system_auth

✓ Remarques
◼ Les noms des datacenters respectent la casse
◼ Pour plusieurs datacenters, s’assurer que la classe de réplication est
« NetworkTopologyStrategy »
◼ Pour un seul datacenter la classe est « SimpleStrategy »

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 86


Bases de données NoSQL -
Cassandra
◼Administration
• Gestion des utilisateurs (rôles)
✓ Création d’utilisateurs, dans Cassandra rôles
◼ Syntaxe :
◼ CREATE ROLE [IF NOT EXISTS] role_name
[WITH [SUPERUSER = true | false]
[AND LOGIN = true | false ]
[AND PASSWORD = 'password’ ]
[AND OPTIONS = option_map]]
◼ role_name : nom du rôle, peut être mis entre quotes
◼ SUPERUSER = true : tous les droits, par défaut false
◼ LOGIN : à true peut se connecter, par défaut false
◼ PASSWORD : mot de passe entre simple quote
◼ OPTIONS : reservé pour utiliser avec authentification plug-ins.
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 87
Bases de données NoSQL -
Cassandra
◼Administration
• Gestion des utilisateurs (rôles)
✓ Création d’utilisateurs, dans Cassandra rôles
◼ Exemple :
◼ CREATE ROLE assale
WITH PASSWORD = 'Yann-67!'
AND LOGIN = true;
◼ Se connecter au nouveau compte à partir de cqlsh :
◼ login assale

◼ password : …

◼ Ce qui donne l’invite suivante : assale@cqlsh>

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 88


Bases de données NoSQL -
Cassandra
◼Administration
• Gestion des utilisateurs (rôles)
✓ Modification/suppression de rôles
◼ Modification :
◼ ALTER ROLE role_name
[WITH [PASSWORD = 'password']
[ AND LOGIN = true | false]
[AND SUPERUSER = true | false]
[AND OPTIONS = map_literal]]
◼ Mettre SUPERUSER à false ne désactive pas AUTHORIZE,
ALTER et DROP déjà reçu
◼ Suppression :
◼ DROP ROLE [IF EXISTS] role_name

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 89


Bases de données NoSQL -
Cassandra
◼Administration
• Gestion des utilisateurs (rôles)
✓ Gestion des privilèges
◼ Octroie de privilèges :
◼ GRANT privilege
ON resource_name
TO role_name
◼ Liste des privileges : ALL PERMISSIONS – ALTER –
AUTHORIZE – CREATE – DESCRIBE – DROP – EXECUTE –
MODIFY – SELECT
◼ Liste des ressources : ALL FUNCTIONS – ALL FUNCTIONS IN
KEYSPACE nom_keyspace – FUNCTION nom_fonction – ALL
KEYSPACES – KEYSPACE nom_keyspace – TABLE nom_table
– ALL MBEAN – MBEAN nom_mbean – ALL ROLES – ROLE
nom_role 90
Bases de données NoSQL -
Cassandra
◼Administration
• Gestion des utilisateurs (rôles)
✓ Gestion des privilèges
◼ Hiérarchie des permissions :
◼ Les permissions s’appliquent suivant une hérarchie, permission
octroyée à un niveau supérieur se propage aux niveaux inférieurs
- ALL KEYSPACES > KEYSPACE > TABLE nom_table
- ALL FUNCTIONS > KEYSPACE > FUNCTION nom_function
- ALL ROLES > Role nom_role
◼ Exemples :
◼ GRANT SELECT ON ALL KEYSPACES TO assale; donne la

permission à assale de faire un SELECT sur toutes les tables dans


tous les keyspaces

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 91


Bases de données NoSQL -
Cassandra
◼Administration
• Gestion des utilisateurs (rôles)
✓ Gestion des privilèges
◼ Exemples :
◼ GRANT MODIFY ON KEYSPACE cass TO manager; donne la
permission à manager de faire un INSERT, UPDATE, DELETE et
TRUNCATE sur toutes les tables du keyspace cass
◼ GRANT ALTER ON KEYSPACE cycliste TO coach; donne

modification de keyspace clycliste ainsi que ALTER TABLE,


CREATE INDEX et DROP INDEX
◼ GRANT ALL PERMISSIONS ON cycliste.matable TO coach; tout

type de requêtes sur matable du keyspace cyclist


◼ GRANT ALL ON KEYSPACE cycliste TO cycliste_admin; role

d’administration avec totale accès sur cycliste


ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 92
Bases de données NoSQL -
Cassandra
◼Administration
• Gestion des utilisateurs (rôles)
✓ Gestion des privilèges
◼ Affichage de permission :
◼ LIST privilege
[ON resource_name]
[OF role_name]
[NORECURSIVE]
◼ NORECURSIVE : affiche uniquement les permissions accordées
aux rôles
◼ Supprimer des privilèges :
◼ REVOKE privilege

ON resource_name
FROM role_name
ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 93
Bases de données NoSQL -
Cassandra
◼Travaux pratiques N6
• Voir fiche de TP

ASSALE ADJE LOUIS Big Data & NoSQL Cassandra 94

Vous aimerez peut-être aussi