Apache Tajo - Instructions SQL
Dans le chapitre précédent, vous avez compris comment créer des tableaux dans Tajo. Ce chapitre explique l'instruction SQL dans Tajo.
Créer une instruction de table
Avant de passer à la création d'une table, créez un fichier texte «étudiants.csv» dans le chemin du répertoire d'installation de Tajo comme suit -
students.csv
Id | Nom | Adresse | Âge | Des marques |
---|---|---|---|---|
1 | Adam | 23 New Street | 21 | 90 |
2 | Amit | 12 Vieille Rue | 13 | 95 |
3 | Bob | 10 rue transversale | 12 | 80 |
4 | David | 15 avenue Express | 12 | 85 |
5 | Esha | 20 rue Garden | 13 | 50 |
6 | Ganga | 25 rue Nord | 12 | 55 |
7 | Jack | 2 rue Park | 12 | 60 |
8 | Leena | 24 rue Sud | 12 | 70 |
9 | Marie | 5 rue Ouest | 12 | 75 |
10 | Peter | 16 Park Avenue | 12 | 95 |
Une fois le fichier créé, accédez au terminal et démarrez le serveur et le shell Tajo un par un.
Créer une base de données
Créez une nouvelle base de données à l'aide de la commande suivante -
Requete
default> create database sampledb;
OK
Connectez-vous à la base de données «sampledb» qui est maintenant créée.
default> \c sampledb
You are now connected to database "sampledb" as user “user1”.
Ensuite, créez une table dans «sampledb» comme suit -
Requete
sampledb> create external table mytable(id int,name text,address text,age int,mark int)
using text with('text.delimiter' = ',') location ‘file:/Users/workspace/Tajo/students.csv’;
Résultat
La requête ci-dessus générera le résultat suivant.
OK
Ici, la table externe est créée. Il ne vous reste plus qu'à entrer l'emplacement du fichier. Si vous devez affecter la table à partir de hdfs, utilisez hdfs au lieu de file.
Ensuite, le “students.csv”Le fichier contient des valeurs séparées par des virgules. letext.delimiter le champ est attribué avec ','.
Vous avez maintenant créé «mytable» avec succès dans «sampledb».
Afficher la table
Pour afficher les tables dans Tajo, utilisez la requête suivante.
Requete
sampledb> \d
mytable
sampledb> \d mytable
Résultat
La requête ci-dessus générera le résultat suivant.
table name: sampledb.mytable
table uri: file:/Users/workspace/Tajo/students.csv
store type: TEXT
number of rows: unknown
volume: 261 B
Options:
'timezone' = 'Asia/Kolkata'
'text.null' = '\\N'
'text.delimiter' = ','
schema:
id INT4
name TEXT
address TEXT
age INT4
mark INT4
Tableau de liste
Pour récupérer tous les enregistrements de la table, tapez la requête suivante -
Requete
sampledb> select * from mytable;
Résultat
La requête ci-dessus générera le résultat suivant.
Insérer une instruction de tableau
Tajo utilise la syntaxe suivante pour insérer des enregistrements dans la table.
Syntaxe
create table table1 (col1 int8, col2 text, col3 text);
--schema should be same for target table schema
Insert overwrite into table1 select * from table2;
(or)
Insert overwrite into LOCATION '/dir/subdir' select * from table;
L'instruction d'insertion de Tajo est similaire à la INSERT INTO SELECT instruction de SQL.
Requete
Créons une table pour écraser les données de table d'une table existante.
sampledb> create table test(sno int,name text,addr text,age int,mark int);
OK
sampledb> \d
Résultat
La requête ci-dessus générera le résultat suivant.
mytable
test
Insérer des enregistrements
Pour insérer des enregistrements dans la table «test», tapez la requête suivante.
Requete
sampledb> insert overwrite into test select * from mytable;
Résultat
La requête ci-dessus générera le résultat suivant.
Progress: 100%, response time: 0.518 sec
Ici, les enregistrements «mytable» écrasent la table «test». Si vous ne voulez pas créer la table «test», attribuez immédiatement l'emplacement du chemin physique comme indiqué dans une option alternative pour insérer une requête.
Récupérer des enregistrements
Utilisez la requête suivante pour lister tous les enregistrements de la table «test» -
Requete
sampledb> select * from test;
Résultat
La requête ci-dessus générera le résultat suivant.
Cette instruction est utilisée pour ajouter, supprimer ou modifier des colonnes d'une table existante.
Pour renommer la table, utilisez la syntaxe suivante -
Alter table table1 RENAME TO table2;
Requete
sampledb> alter table test rename to students;
Résultat
La requête ci-dessus générera le résultat suivant.
OK
Pour vérifier le nom de table modifié, utilisez la requête suivante.
sampledb> \d
mytable
students
Maintenant, la table «test» est remplacée par la table «étudiants».
Ajouter une colonne
Pour insérer une nouvelle colonne dans le tableau «étudiants», saisissez la syntaxe suivante -
Alter table <table_name> ADD COLUMN <column_name> <data_type>
Requete
sampledb> alter table students add column grade text;
Résultat
La requête ci-dessus générera le résultat suivant.
OK
Définir la propriété
Cette propriété est utilisée pour modifier la propriété de la table.
Requete
sampledb> ALTER TABLE students SET PROPERTY 'compression.type' = 'RECORD',
'compression.codec' = 'org.apache.hadoop.io.compress.Snappy Codec' ;
OK
Ici, le type de compression et les propriétés du codec sont attribués.
Pour modifier la propriété du délimiteur de texte, utilisez ce qui suit -
Requete
ALTER TABLE students SET PROPERTY ‘text.delimiter'=',';
OK
Résultat
La requête ci-dessus générera le résultat suivant.
sampledb> \d students
table name: sampledb.students
table uri: file:/tmp/tajo-user1/warehouse/sampledb/students
store type: TEXT
number of rows: 10
volume: 228 B
Options:
'compression.type' = 'RECORD'
'timezone' = 'Asia/Kolkata'
'text.null' = '\\N'
'compression.codec' = 'org.apache.hadoop.io.compress.SnappyCodec'
'text.delimiter' = ','
schema:
id INT4
name TEXT
addr TEXT
age INT4
mark INT4
grade TEXT
Le résultat ci-dessus montre que les propriétés de la table sont modifiées à l'aide de la propriété «SET».
Sélectionner une déclaration
L'instruction SELECT est utilisée pour sélectionner des données dans une base de données.
La syntaxe de l'instruction Select est la suivante -
SELECT [distinct [all]] * | <expression> [[AS] <alias>] [, ...]
[FROM <table reference> [[AS] <table alias name>] [, ...]]
[WHERE <condition>]
[GROUP BY <expression> [, ...]]
[HAVING <condition>]
[ORDER BY <expression> [ASC|DESC] [NULLS (FIRST|LAST)] [, …]]
Clause Où
La clause Where est utilisée pour filtrer les enregistrements de la table.
Requete
sampledb> select * from mytable where id > 5;
Résultat
La requête ci-dessus générera le résultat suivant.
La requête renvoie les enregistrements des étudiants dont l'ID est supérieur à 5.
Requete
sampledb> select * from mytable where name = ‘Peter’;
Résultat
La requête ci-dessus générera le résultat suivant.
Progress: 100%, response time: 0.117 sec
id, name, address, age
-------------------------------
10, Peter, 16 park avenue , 12
Le résultat filtre uniquement les enregistrements de Peter.
Clause distincte
Une colonne de table peut contenir des valeurs en double. Le mot clé DISTINCT peut être utilisé pour renvoyer uniquement des valeurs distinctes (différentes).
Syntaxe
SELECT DISTINCT column1,column2 FROM table_name;
Requete
sampledb> select distinct age from mytable;
Résultat
La requête ci-dessus générera le résultat suivant.
Progress: 100%, response time: 0.216 sec
age
-------------------------------
13
12
La requête renvoie l'âge distinct des élèves de mytable.
Clause de groupe
La clause GROUP BY est utilisée en collaboration avec l'instruction SELECT pour organiser des données identiques en groupes.
Syntaxe
SELECT column1, column2 FROM table_name WHERE [ conditions ] GROUP BY column1, column2;
Requete
select age,sum(mark) as sumofmarks from mytable group by age;
Résultat
La requête ci-dessus générera le résultat suivant.
age, sumofmarks
-------------------------------
13, 145
12, 610
Ici, la colonne «mytable» a deux types d'âge - 12 et 13. La requête regroupe désormais les enregistrements par âge et produit la somme des notes pour les âges correspondants des élèves.
Avoir une clause
La clause HAVING vous permet de spécifier des conditions qui filtrent les résultats de groupe qui apparaissent dans les résultats finaux. La clause WHERE place des conditions sur les colonnes sélectionnées, tandis que la clause HAVING place des conditions sur les groupes créés par la clause GROUP BY.
Syntaxe
SELECT column1, column2 FROM table1 GROUP BY column HAVING [ conditions ]
Requete
sampledb> select age from mytable group by age having sum(mark) > 200;
Résultat
La requête ci-dessus générera le résultat suivant.
age
-------------------------------
12
La requête regroupe les enregistrements par âge et renvoie l'âge lorsque la somme du résultat de la condition (marque)> 200.
Trier par clause
La clause ORDER BY est utilisée pour trier les données par ordre croissant ou décroissant, en fonction d'une ou plusieurs colonnes. La base de données Tajo trie les résultats de la requête par ordre croissant par défaut.
Syntaxe
SELECT column-list FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
Requete
sampledb> select * from mytable where mark > 60 order by name desc;
Résultat
La requête ci-dessus générera le résultat suivant.
La requête renvoie les noms des élèves par ordre décroissant dont les notes sont supérieures à 60.
Créer une déclaration d'index
L'instruction CREATE INDEX est utilisée pour créer des index dans les tables. L'index est utilisé pour une récupération rapide des données. La version actuelle prend en charge l'index uniquement pour les formats TEXT simples stockés sur HDFS.
Syntaxe
CREATE INDEX [ name ] ON table_name ( { column_name | ( expression ) }
Requete
create index student_index on mytable(id);
Résultat
La requête ci-dessus générera le résultat suivant.
id
———————————————
Pour afficher l'index attribué à la colonne, tapez la requête suivante.
default> \d mytable
table name: default.mytable
table uri: file:/Users/deiva/workspace/Tajo/students.csv
store type: TEXT
number of rows: unknown
volume: 307 B
Options:
'timezone' = 'Asia/Kolkata'
'text.null' = '\\N'
'text.delimiter' = ','
schema:
id INT4
name TEXT
address TEXT
age INT4
mark INT4
Indexes:
"student_index" TWO_LEVEL_BIN_TREE (id ASC NULLS LAST )
Ici, la méthode TWO_LEVEL_BIN_TREE est utilisée par défaut dans Tajo.
Instruction Drop Table
L'instruction Drop Table est utilisée pour supprimer une table de la base de données.
Syntaxe
drop table table name;
Requete
sampledb> drop table mytable;
Pour vérifier si la table a été supprimée de la table, tapez la requête suivante.
sampledb> \d mytable;
Résultat
La requête ci-dessus générera le résultat suivant.
ERROR: relation 'mytable' does not exist
Vous pouvez également vérifier la requête en utilisant la commande «\ d» pour lister les tables Tajo disponibles.