Differences

This shows you the differences between two versions of the page.

Link to this comparison view

bd2:laboratoare:13 [2021/01/17 23:34]
vlad_iulian.ilie [Tipuri definite de utilizator]
— (current)
Line 1: Line 1:
-====== Laboratorul 12 - Cassandra ====== 
- 
-===== Obiective ===== 
- 
- 
-===== Instalare =====  
- 
-Pentru a utiliza Cassandra folosind Docker: 
- 
-  - Descarcati imaginea Docker: <​code>​docker pull cassandra</​code>​ 
-  - Porniti un container bazat pe imaginea descarcata: <​code>​docker run --name cassandradb -d cassandra:​latest</​code>​ 
-===== Comenzi Cassandra ===== 
- 
-==== Conexiune la Cassandra ==== 
- 
-Pentru a ne conecta la un server Cassandra putem folosi utilitarul **cqlsh** ([[https://​cassandra.apache.org/​doc/​latest/​tools/​cqlsh.html|Documentație]]). 
- 
-Printre parametrii pe care cqlsh ii permite avem: 
- 
-  * ''​--user''​ - specifica utilizatorul cu care sa se conecteze la Cassandra 
-  * ''​--password''​ - specifica parola utilizatorului 
-  * ''​--keyspace''​ - precizeaza keyspace-ul la care sa se conecteze 
-  * ''​--file''​ - specifica un fisier din care sa se execute comenzi, urmate de exit 
- 
-Deschideti o conexiune la Cassandra ruland comanda: <​code>​docker exec -it cassandradb cqlsh</​code>​ 
-  
-==== Comenzi CLI Cassandra ==== 
- 
-Cateva dintre comenzile ce tin de administrarea **keyspace-urilor** sunt: 
- 
-<code sql> 
--- listare keyspace-uri disponibile 
-DESCRIBE KESPACES; 
- 
--- afisare keyspace curent 
-DESCRIBE KEYSPACE; 
- 
--- conectare la un keyspace existent 
-USE <​keyspace_name>;​ 
- 
--- creare keyspace nou 
-CREATE KEYSPACE <​keyspace_name>​ WITH replication = {'​class':​ '​SimpleStrategy',​ '​replication_factor':​ 3 }; 
- 
--- creare keyspace nou fara a scrie operatiile si in commit log 
-CREATE KEYSPACE <​keyspace_name>​ WITH replication = {'​class':​ '​SimpleStrategy',​ '​replication_factor':​ 3 } AND durable_writes = true; 
- 
--- stergere keyspace 
-DELETE KEYSPACE <​keyspace_name>;​ 
-</​code>​ 
- 
-<color red>Ex. 1.</​color>​ Creati un keyspace cu numele **students_keyspace** cu durable_writes setat pe true si conectati-va la el. 
- 
-Pentru a crea un tabel in keyspace-ul curent: 
- 
-<code sql> 
-CREATE TABLE <​table_name>​ ( 
-   <​column_name1>​ datatype PRIMARYKEY, 
-   <​column_name2>​ datatype, 
-   <​column_name3>​ datatype, 
-   ... 
-) 
-</​code>​ 
- 
-Pentru a sterge un tabel in keyspace-ul curent: 
- 
-<code sql>DROP TABLE <​table_name></​code>​ 
- 
-<color red>Ex. 2.</​color>​ Creati o tabela cu numele **students** care are coloanele: //id// de tip INT ca PRIMARY KEY, //​firstname//​ de tip VARCHAR, //​lastname//​ de tip VARCHAR, //year// de tip INT, //group// de tip VARCHAR. 
- 
-===== Operatii DML ===== 
- 
-==== Inserarea datelor ==== 
- 
-Pentru a insera date in Cassandra se poate folosi comanda **INSERT**, asemanator limbajului SQL: 
- 
-<code sql> 
-INSERT INTO <​table_name>​ (<​column_name1>,​ <​column_name2>​....) 
-VALUES (<​value1>,​ <​value2>​....);​ 
-</​code>​ 
- 
-Inserati in tabela students urmatorii studenti: 
- 
-<code sql> 
-INSERT INTO students (id, firstname, lastname, year, group) VALUES (1, '​Ion',​ '​Popescu',​ 4, '​342C3'​);​ 
-INSERT INTO students (id, firstname, lastname, year, group) VALUES (2, '​Andrei',​ '​Ionescu',​ 4, '​341C4'​);​ 
-INSERT INTO students (id, firstname, lastname, year, group) VALUES (3, '​George',​ '​Popescu',​ 4, '​341C2'​);​ 
-INSERT INTO students (id, firstname, lastname, year, group) VALUES (4, '​Georgiana',​ '​Petrescu',​ 4, '​341C2'​);​ 
-INSERT INTO students (id, firstname, lastname, year, group) VALUES (5, '​Valentina',​ '​Vasilescu',​ 3, '​331CA'​);​ 
-INSERT INTO students (id, firstname, lastname, year, group) VALUES (6, '​Grigore',​ '​Ionescu',​ 4, '​342C2'​);​ 
-INSERT INTO students (id, firstname, lastname, year, group) VALUES (7, '​Andrei',​ '​Popescu',​ 3, '​332CA'​);​ 
-INSERT INTO students (id, firstname, lastname, year, group) VALUES (8, '​Ana',​ '​Georgescu',​ 4, '​342C5'​);​ 
-</​code>​ 
- 
-<color red>Ex. 3.</​color>​ Inserati in tabela students 2 colegi. 
- 
-==== Selectarea datelor ==== 
- 
-Operatia de selectie a datelor in Cassandra se poate realiza prin comanda **SELECT**: 
- 
-<code sql> 
-SELECT * | select_expression ​ 
-FROM [keyspace_name.] <​table_name>​ 
-[WHERE filters] ​ 
-[ORDER BY column_name1,​ column_name2... ASC|DESC] ​ 
-[LIMIT N] 
-[ALLOW FILTERING]; 
-</​code>​ 
- 
-<​note>​ 
-Pentru a putea impune conditii de filtrare pe coloane care nu sunt indexate trebuie precizat explicit ALLOW FILTERING. 
- 
-Limitari ale comenzii SELECT: 
-  * Nu se pot folosi subcereri. 
-  * Unii operatori nu sunt acceptati. Ex.: BETWEEN 
-  * Unii operatori functioneaza doar pe chei primare. Ex.: IN 
-  * Nu exista operatia JOIN. 
-</​note>​ 
- 
-<color red>Ex. 4.</​color>​ Selectati toti studentii de anul 4 care au literele //pe// (case insensitive) in nume sau in prenume. 
-==== Modificarea datelor ==== 
- 
-Pentru a modifica datele in Cassandra se foloseste comanda **UPDATE**: 
- 
-<code sql> 
-UPDATE [keyspace_name.] <​table_name>​ 
-SET assignment [, assignment] . . .  
-WHERE row_specification 
-</​code>​ 
- 
-<color red>Ex. 5.</​color>​ Promovati toti studentii din tabela students de anul 3 in anul 4, prin actualizarea coloanei //year// si //group//. 
- 
- 
-==== Stergerea datelor ==== 
- 
-Pentru a sterge datele in Cassandra se poate folosi comanda **DELETE**: 
- 
-<code sql> 
-DELETE [column_name (term)][, ...] 
-FROM [keyspace_name.] <​table_name>​ 
-WHERE PK_column_conditions;​ 
-</​code>​ 
- 
-<​note>​Clauza WHERE poate contine numai conditii ce tin de chei primare.</​note>​ 
- 
-Alternativ, se poate folosi comanda **TRUNCATE** pentru a sterge toate valorile dintr-un tabel: 
- 
-<code sql> 
-TRUNCATE [TABLE] [keyspace_name.] <​table_name>​ 
-</​code>​ 
- 
-<color red>Ex. 6.</​color>​ Stergeti din tabela students studentii cu id-urile 1, 3 si 5. 
-===== Tipuri colectie ===== 
- 
-Tipurile colectie sunt utile in cazurile in care avem nevoie sa stocam un numar variabil de elemente intr-o singura coloana. 
- 
-Cassandra pune la dispozitie urmatoarele tipuri colectie: 
-  * Set 
-  * List 
-  * Map 
- 
-==== Tipul Set ==== 
- 
-Tipul de date set stocheaza o multime de elemente neordonate, care pot fi de tipuri simple, tipuri definite de utilizator sau alte colectii. 
- 
-Pentru a adauga o coloana de tip set intr-o tabela putem folosi: 
-<code sql> 
-ALTER TABLE <​table_name>​ ADD <​column_name>​ SET<​data_type>;​ 
-</​code>​ 
- 
-<​note>​ 
-La interogari, **cqlsh** intoarce elementele din set sortate. 
- 
-Un avantaj al utilizarii setului este posibilitatea de a adauga elemente fara a fi nevoiti sa citim continutul setului intai. 
-</​note>​ 
- 
-<​note>​ 
-Pentru a adauga un nou element in set se foloseste **+**: <​code>​my_set = my_set + { new_element }</​code>​ 
- 
-Pentru a sterge un element din set se foloseste **-**: <​code>​my_set = my_set - { old_element }</​code>​ 
- 
-Pentru a seta un set gol se foloseste **{}**: <​code>​my_set = {}</​code>​ 
-</​note>​ 
- 
-Adaugati la tabela students coloana //hobbies// de tipul SET<​TEXT>:​ 
-<code sql>​ALTER TABLE students ADD hobbies SET<​TEXT>;</​code>​ 
- 
-Apoi populati coloana hobbies pentru studentii predefiniti:​ 
-<code sql> 
-UPDATE students SET hobbies = {'​Tennis',​ '​Chess'​} WHERE id = 2; 
-UPDATE students SET hobbies = {'​Programming',​ '​Design'​} WHERE id = 4; 
-UPDATE students SET hobbies = {'​Table Tennis',​ '​Backgammon'​} WHERE id = 6; 
-UPDATE students SET hobbies = {'​Football'​} WHERE id = 7; 
-UPDATE students SET hobbies = {'​Swimming'​} WHERE id = 8; 
-</​code>​ 
- 
-<color red>Ex. 7.</​color>​ Adaugati hobby-uri pentru studentii inserati in tabela students la exercitiul 3. 
-==== Tipul List ==== 
- 
-Tipul de date list contine o lista de elemente ordonate. In mod standard, ele sunt ordonate dupa ordinea de inserare. 
- 
-Pentru a adauga o coloana de tipul list putem folosi: 
-<code sql> 
-ALTER TABLE <​table_name>​ ADD <​column_name>​ LIST<​data_type>;​ 
-</​code>​ 
- 
-<​note>​ 
-Pentru a adauga un element in lista se poate folosi **+**: <​code>​my_list = my_list + [ new_element ]</​code>​ 
-Pentru a sterge un element din lista se poate folosi **-**: <​code>​my_list = my_list - [ old_element ]</​code>​ 
-Pentru a seta o lista goala se poate folosi **[]**: <​code>​my_list = []</​code>​ 
-</​note>​ 
- 
-<​note>​ 
-Se pot folosi indecsi pentru a accesa elemente specifice in lista folosind **[index_number]**,​ indexarea pornind de la 0. 
-</​note>​ 
- 
-Adaugati o coloana de tip lista in tabela students, cu numele //​languages//​ si tipul LIST<​TEXT>:​ 
-<code sql> 
-ALTER TABLE students ADD languages LIST<​TEXT>;​ 
-</​code>​ 
- 
-Apoi populati coloana languages pentru studentii predefiniti:​ 
-<code sql> 
-UPDATE students SET languages = ['​C',​ '​C++'​] WHERE id = 2; 
-UPDATE students SET languages = ['​Java',​ '​Scala'​] WHERE id = 4; 
-UPDATE students SET languages = ['​Python',​ '​Go'​] WHERE id = 6; 
-UPDATE students SET languages = ['​Ruby'​] WHERE id = 7; 
-UPDATE students SET languages = ['​PHP',​ '​Javascript'​] WHERE id = 8; 
-</​code>​ 
- 
-<color red>Ex. 8.</​color>​ Adaugati limbajul C# pentru studentul cu id-ul 2 la lista de limbaje de programare cunoscute si goliti lista de limbaje de programare cunoscute pentru studentul cu id-ul 8. 
- 
- 
-==== Tipul Map ==== 
- 
-Tipul de date map contine o multime de perechi cheie-valoare. Cheile si valorile pot avea orice tip cu exceptia counter. 
- 
-Pentru a adauga o coloana de tip map intr-o tabela putem folosi: 
-<code sql> 
-ALTER TABLE <​table_name>​ ADD <​column_name>​ MAP<​data_type_key,​ data_type_value>;​ 
-</​code>​ 
- 
-<​note>​ 
-Cheile map-ului pot fi accesate folosind **[key_name]**:​ <​code>​my_map[my_key] = my_value</​code>​ 
-Pentru a verifica daca un map contine o valoare putem folosi **CONTAINS**:​ <code sql>​SELECT * FROM my_table WHERE map_column CONTAINS map_value ALLOW FILTERING;</​code>​ 
-Pentru a verifica daca un map contine o cheie putem folosi **CONTAINS KEY**: <code sql>​SELECT * FROM my_table WHERE map_column CONTAINS KEY map_key ALLOW FILTERING;</​code>​ 
-</​note>​ 
- 
-Adaugati la tabela students coloana //grades// de tipul MAP<​TEXT,​ DOUBLE>: 
-<code sql> 
-ALTER TABLE students ADD grades MAP<​TEXT,​ DOUBLE>; 
-</​code>​ 
- 
-Apoi adaugati note la studentii predefiniti:​ 
-<code sql> 
-UPDATE students SET grades = {'Baze de date 2': 10, '​Utilizarea sistemelor de operare':​ 8} WHERE id = 2; 
-UPDATE students SET grades = {'​Programare web': 9, '​Calculatoare numerice':​ 8} WHERE id = 4; 
-UPDATE students SET grades = {'Baze de date 2': 9} WHERE id = 6; 
-UPDATE students SET grades = {'​Matematica 1': 8, '​Matematica 2': 9} WHERE id = 7; 
-UPDATE students SET grades = {'​Metode numerice':​ 10, 'Baze de date 2': 7} WHERE id = 8; 
-</​code>​ 
- 
-<color red>Ex. 9.</​color>​ Selectati studentii care au note la materia 'Baze de date 2'. 
- 
- 
- 
- 
- 
- 
-===== Indecsi ===== 
- 
- 
-===== Tipuri definite de utilizator ===== 
- 
-Cassandra suporta si tipuri definite de utilizator (User defined types - **UDT**). Acestea pot fi folosite atat de sine statator, cat si in colectii. 
- 
-<​note>​ 
-La utilizarea unui UDT intr-o colectie, acesta trebuie declarat ca **frozen**, ceea ce inseamna ca modificarea valorii nu se poate face accesand individual campurile UDT-ului, ci doar modificata ca intreg obiect. 
-</​note>​ 
- 
-Pentru a defini un UDT se poate folosi: 
-<code sql> 
-CREATE TYPE [IF NOT EXISTS] ​ 
-[keyspace_name.] <​type_name>​( 
-<​field_name>​ <​datatype>​[,​] ​ 
-[<​field_name>​ <​datatype>​] [,...] 
-) 
-</​code>​ 
- 
  
bd2/laboratoare/13.1610919298.txt.gz · Last modified: 2021/01/17 23:34 by vlad_iulian.ilie
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0