Apache Tajo - Dichiarazioni SQL

Nel capitolo precedente hai capito come creare tabelle in Tajo. Questo capitolo spiega l'istruzione SQL in Tajo.

Crea istruzione tabella

Prima di passare alla creazione di una tabella, creare un file di testo "students.csv" nel percorso della directory di installazione di Tajo come segue:

students.csv

Id Nome Indirizzo Età Marks
1 Adamo 23 New Street 21 90
2 Amit 12 Old Street 13 95
3 Bob 10 Cross Street 12 80
4 David 15 Express Avenue 12 85
5 Esha 20 Garden Street 13 50
6 Ganga 25 North Street 12 55
7 Jack 2 Park Street 12 60
8 Leena 24 South Street 12 70
9 Maria 5 West Street 12 75
10 Peter 16 Park Avenue 12 95

Dopo che il file è stato creato, spostati sul terminale e avvia il server Tajo e la shell uno per uno.

Crea database

Crea un nuovo database utilizzando il seguente comando:

Query

default> create database sampledb; 
OK

Connettiti al database "sampledb" che è ora creato.

default> \c sampledb 
You are now connected to database "sampledb" as user “user1”.

Quindi, crea una tabella in "sampledb" come segue:

Query

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’;

Risultato

La query precedente genererà il seguente risultato.

OK

Qui viene creata la tabella esterna. Ora, devi solo inserire il percorso del file. Se devi assegnare la tabella da hdfs, usa hdfs invece di file.

Successivamente, il “students.csv”file contiene valori separati da virgole. Iltext.delimiter il campo è assegnato con ",".

Ora hai creato con successo "mytable" in "sampledb".

Mostra tabella

Per mostrare le tabelle in Tajo, usa la seguente query.

Query

sampledb> \d  
mytable  
sampledb> \d mytable

Risultato

La query precedente genererà il seguente risultato.

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

Tabella degli elenchi

Per recuperare tutti i record nella tabella, digita la seguente query:

Query

sampledb> select * from mytable;

Risultato

La query precedente genererà il seguente risultato.

Inserisci istruzione tabella

Tajo utilizza la seguente sintassi per inserire i record nella tabella.

Sintassi

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;

La dichiarazione di inserimento di Tajo è simile alla INSERT INTO SELECT dichiarazione di SQL.

Query

Creiamo una tabella per sovrascrivere i dati della tabella di una tabella esistente.

sampledb> create table test(sno int,name text,addr text,age int,mark int);  
OK 
sampledb> \d

Risultato

La query precedente genererà il seguente risultato.

mytable 
test

Inserisci record

Per inserire record nella tabella "test", digita la seguente query.

Query

sampledb> insert overwrite into test select * from mytable;

Risultato

La query precedente genererà il seguente risultato.

Progress: 100%, response time: 0.518 sec

Qui, i record "mytable" sovrascrivono la tabella "test" Se non si desidera creare la tabella "test", assegnare immediatamente la posizione del percorso fisico come indicato in un'opzione alternativa per inserire query.

Recupera record

Utilizza la seguente query per elencare tutti i record nella tabella "test":

Query

sampledb> select * from test;

Risultato

La query precedente genererà il seguente risultato.

Questa istruzione viene utilizzata per aggiungere, rimuovere o modificare colonne di una tabella esistente.

Per rinominare la tabella utilizzare la seguente sintassi:

Alter table table1 RENAME TO table2;

Query

sampledb> alter table test rename to students;

Risultato

La query precedente genererà il seguente risultato.

OK

Per controllare il nome della tabella modificato, utilizzare la seguente query.

sampledb> \d  
mytable 
students

Ora la tabella "test" viene modificata in tabella "studenti".

Aggiungi colonna

Per inserire una nuova colonna nella tabella "studenti", digita la seguente sintassi:

Alter table <table_name> ADD COLUMN <column_name> <data_type>

Query

sampledb> alter table students add column grade text;

Risultato

La query precedente genererà il seguente risultato.

OK

Imposta proprietà

Questa proprietà viene utilizzata per modificare la proprietà della tabella.

Query

sampledb> ALTER TABLE students SET PROPERTY 'compression.type' = 'RECORD',
   'compression.codec' = 'org.apache.hadoop.io.compress.Snappy Codec' ; 
OK

Qui vengono assegnati il ​​tipo di compressione e le proprietà del codec.

Per modificare la proprietà del delimitatore di testo, utilizzare quanto segue:

Query

ALTER TABLE students  SET PROPERTY ‘text.delimiter'=',';  
OK

Risultato

La query precedente genererà il seguente risultato.

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

Il risultato sopra mostra che le proprietà della tabella vengono modificate utilizzando la proprietà "SET".

Seleziona Statement

L'istruzione SELECT viene utilizzata per selezionare i dati da un database.

La sintassi per l'istruzione Select è la seguente:

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)] [, …]]

Dove la clausola

La clausola Where viene utilizzata per filtrare i record dalla tabella.

Query

sampledb> select * from mytable where id > 5;

Risultato

La query precedente genererà il seguente risultato.

La query restituisce i record di quegli studenti il ​​cui ID è maggiore di 5.

Query

sampledb> select * from mytable where name = ‘Peter’;

Risultato

La query precedente genererà il seguente risultato.

Progress: 100%, response time: 0.117 sec 
 
  id,  name,  address,   age  
------------------------------- 
10,  Peter,  16 park avenue , 12

Il risultato filtra solo i record di Peter.

Clausola distinta

Una colonna della tabella può contenere valori duplicati. La parola chiave DISTINCT può essere utilizzata per restituire solo valori distinti (diversi).

Sintassi

SELECT DISTINCT column1,column2 FROM table_name;

Query

sampledb> select distinct age from mytable;

Risultato

La query precedente genererà il seguente risultato.

Progress: 100%, response time: 0.216 sec  
age 
------------------------------- 
13 
12

La query restituisce l'età distinta degli studenti da mytable.

Raggruppa per clausola

La clausola GROUP BY viene utilizzata in collaborazione con l'istruzione SELECT per organizzare dati identici in gruppi.

Sintassi

SELECT column1, column2 FROM table_name WHERE [ conditions ] GROUP BY column1, column2;

Query

select age,sum(mark) as sumofmarks from mytable group by age;

Risultato

La query precedente genererà il seguente risultato.

age,  sumofmarks 
------------------------------- 
13,  145 
12,  610

Qui, la colonna "mytable" ha due tipi di età: 12 e 13. Ora la query raggruppa i record per età e produce la somma dei voti per le età corrispondenti degli studenti.

Avere clausola

La clausola HAVING consente di specificare le condizioni che filtrano i risultati del gruppo visualizzati nei risultati finali. La clausola WHERE pone condizioni sulle colonne selezionate, mentre la clausola HAVING pone condizioni sui gruppi creati dalla clausola GROUP BY.

Sintassi

SELECT column1, column2 FROM table1 GROUP BY column HAVING [ conditions ]

Query

sampledb> select age from mytable group by age  having  sum(mark) > 200;

Risultato

La query precedente genererà il seguente risultato.

age 
------------------------------- 
12

La query raggruppa i record per età e restituisce l'età in cui la somma dei risultati della condizione (segno) è> 200.

Ordine per clausola

La clausola ORDER BY viene utilizzata per ordinare i dati in ordine crescente o decrescente, in base a una o più colonne. Il database Tajo ordina i risultati della query in ordine crescente per impostazione predefinita.

Sintassi

SELECT column-list FROM table_name  
[WHERE condition]  
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

Query

sampledb> select * from mytable where mark > 60 order by name desc;

Risultato

La query precedente genererà il seguente risultato.

La query restituisce i nomi di quegli studenti in ordine decrescente i cui voti sono maggiori di 60.

Crea dichiarazione indice

L'istruzione CREATE INDEX viene utilizzata per creare indici nelle tabelle. L'indice viene utilizzato per il recupero rapido dei dati. La versione corrente supporta l'indice solo per i formati TEXT normali archiviati su HDFS.

Sintassi

CREATE INDEX [ name ] ON table_name ( { column_name | ( expression ) }

Query

create index student_index on mytable(id);

Risultato

La query precedente genererà il seguente risultato.

id 
———————————————

Per visualizzare l'indice assegnato per la colonna, digitare la seguente query.

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 )

Qui, il metodo TWO_LEVEL_BIN_TREE viene utilizzato per impostazione predefinita in Tajo.

Istruzione Drop Table

L'istruzione Drop Table viene utilizzata per eliminare una tabella dal database.

Sintassi

drop table table name;

Query

sampledb> drop table mytable;

Per verificare se la tabella è stata eliminata dalla tabella, digitare la seguente query.

sampledb> \d mytable;

Risultato

La query precedente genererà il seguente risultato.

ERROR: relation 'mytable' does not exist

Puoi anche controllare la query usando il comando "\ d" per elencare le tabelle Tajo disponibili.