Apache Tajo - SQL-Anweisungen

Im vorherigen Kapitel haben Sie verstanden, wie Sie Tabellen in Tajo erstellen. In diesem Kapitel wird die SQL-Anweisung in Tajo erläutert.

Tabellenanweisung erstellen

Erstellen Sie vor dem Erstellen einer Tabelle eine Textdatei „students.csv“ im Pfad des Tajo-Installationsverzeichnisses wie folgt:

students.csv

Ich würde Name Adresse Alter Markierungen
1 Adam 23 New Street 21 90
2 Amit 12 Alte Straße 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

Nachdem die Datei erstellt wurde, wechseln Sie zum Terminal und starten Sie den Tajo-Server und die Shell nacheinander.

Datenbank erstellen

Erstellen Sie eine neue Datenbank mit dem folgenden Befehl:

Abfrage

default> create database sampledb; 
OK

Stellen Sie eine Verbindung zu der Datenbank "sampledb" her, die jetzt erstellt wird.

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

Erstellen Sie dann eine Tabelle in "sampledb" wie folgt:

Abfrage

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

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

OK

Hier wird die externe Tabelle erstellt. Jetzt müssen Sie nur noch den Speicherort der Datei eingeben. Wenn Sie die Tabelle von hdfs zuweisen müssen, verwenden Sie hdfs anstelle von file.

Als nächstes die “students.csv”Datei enthält durch Kommas getrennte Werte. Dastext.delimiter Feld ist mit ',' belegt.

Sie haben "mytable" jetzt erfolgreich in "sampledb" erstellt.

Tabelle anzeigen

Verwenden Sie die folgende Abfrage, um Tabellen in Tajo anzuzeigen.

Abfrage

sampledb> \d  
mytable  
sampledb> \d mytable

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

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

Listentabelle

Geben Sie die folgende Abfrage ein, um alle Datensätze in der Tabelle abzurufen:

Abfrage

sampledb> select * from mytable;

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

Tabellenanweisung einfügen

Tajo verwendet die folgende Syntax, um Datensätze in eine Tabelle einzufügen.

Syntax

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;

Tajos Einfügeanweisung ähnelt der INSERT INTO SELECT Anweisung von SQL.

Abfrage

Erstellen wir eine Tabelle, um Tabellendaten einer vorhandenen Tabelle zu überschreiben.

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

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

mytable 
test

Datensätze einfügen

Geben Sie die folgende Abfrage ein, um Datensätze in die Testtabelle einzufügen.

Abfrage

sampledb> insert overwrite into test select * from mytable;

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

Progress: 100%, response time: 0.518 sec

Hier überschreiben "mytable" -Datensätze die "test" -Tabelle. Wenn Sie die "test" -Tabelle nicht erstellen möchten, weisen Sie sofort den physischen Pfad zu, wie in einer alternativen Option zum Einfügen von Abfragen angegeben.

Datensätze abrufen

Verwenden Sie die folgende Abfrage, um alle Datensätze in der Testtabelle aufzulisten:

Abfrage

sampledb> select * from test;

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

Diese Anweisung wird verwendet, um Spalten einer vorhandenen Tabelle hinzuzufügen, zu entfernen oder zu ändern.

Verwenden Sie zum Umbenennen der Tabelle die folgende Syntax:

Alter table table1 RENAME TO table2;

Abfrage

sampledb> alter table test rename to students;

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

OK

Verwenden Sie die folgende Abfrage, um den geänderten Tabellennamen zu überprüfen.

sampledb> \d  
mytable 
students

Jetzt wird die Tabelle "Test" in die Tabelle "Schüler" geändert.

Spalte hinzufügen

Geben Sie die folgende Syntax ein, um eine neue Spalte in die Tabelle "Schüler" einzufügen:

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

Abfrage

sampledb> alter table students add column grade text;

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

OK

Eigenschaft festlegen

Diese Eigenschaft wird verwendet, um die Eigenschaft der Tabelle zu ändern.

Abfrage

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

Hier werden Komprimierungstyp und Codec-Eigenschaften zugewiesen.

Verwenden Sie Folgendes, um die Eigenschaft des Textbegrenzers zu ändern:

Abfrage

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

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

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

Das obige Ergebnis zeigt, dass die Eigenschaften der Tabelle mithilfe der Eigenschaft "SET" geändert werden.

Wählen Sie Anweisung

Die SELECT-Anweisung wird verwendet, um Daten aus einer Datenbank auszuwählen.

Die Syntax für die Select-Anweisung lautet wie folgt:

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

Wo Klausel

Die Where-Klausel wird verwendet, um Datensätze aus der Tabelle zu filtern.

Abfrage

sampledb> select * from mytable where id > 5;

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

Die Abfrage gibt die Datensätze der Schüler zurück, deren ID größer als 5 ist.

Abfrage

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

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

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

Das Ergebnis filtert nur Peters Datensätze.

Eindeutige Klausel

Eine Tabellenspalte kann doppelte Werte enthalten. Das Schlüsselwort DISTINCT kann verwendet werden, um nur unterschiedliche (unterschiedliche) Werte zurückzugeben.

Syntax

SELECT DISTINCT column1,column2 FROM table_name;

Abfrage

sampledb> select distinct age from mytable;

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

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

Die Abfrage gibt das unterschiedliche Alter der Schüler aus zurück mytable.

Gruppieren nach Klausel

Die GROUP BY-Klausel wird in Zusammenarbeit mit der SELECT-Anweisung verwendet, um identische Daten in Gruppen anzuordnen.

Syntax

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

Abfrage

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

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

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

In der Spalte "mytable" gibt es zwei Arten von Altersgruppen - 12 und 13. Jetzt gruppiert die Abfrage die Datensätze nach Alter und erzeugt die Summe der Noten für das entsprechende Alter der Schüler.

Klausel haben

Mit der HAVING-Klausel können Sie Bedingungen angeben, die filtern, welche Gruppenergebnisse in den Endergebnissen angezeigt werden. Die WHERE-Klausel legt Bedingungen für die ausgewählten Spalten fest, während die HAVING-Klausel Bedingungen für die durch die GROUP BY-Klausel erstellten Gruppen festlegt.

Syntax

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

Abfrage

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

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

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

Die Abfrage gruppiert die Datensätze nach Alter und gibt das Alter zurück, wenn die Bedingungsergebnissumme (Markierung)> 200 ist.

Order By-Klausel

Die ORDER BY-Klausel wird verwendet, um die Daten in aufsteigender oder absteigender Reihenfolge basierend auf einer oder mehreren Spalten zu sortieren. Die Tajo-Datenbank sortiert Abfrageergebnisse standardmäßig in aufsteigender Reihenfolge.

Syntax

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

Abfrage

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

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

Die Abfrage gibt die Namen der Schüler in absteigender Reihenfolge zurück, deren Noten größer als 60 sind.

Indexanweisung erstellen

Mit der Anweisung CREATE INDEX werden Indizes in Tabellen erstellt. Der Index dient zum schnellen Abrufen von Daten. Die aktuelle Version unterstützt den Index nur für einfache TEXT-Formate, die in HDFS gespeichert sind.

Syntax

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

Abfrage

create index student_index on mytable(id);

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

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

Geben Sie die folgende Abfrage ein, um den zugewiesenen Index für die Spalte anzuzeigen.

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 )

Hier wird in Tajo standardmäßig die Methode TWO_LEVEL_BIN_TREE verwendet.

Drop Table-Anweisung

Die Anweisung "Tabelle löschen" wird verwendet, um eine Tabelle aus der Datenbank zu löschen.

Syntax

drop table table name;

Abfrage

sampledb> drop table mytable;

Geben Sie die folgende Abfrage ein, um zu überprüfen, ob die Tabelle aus der Tabelle entfernt wurde.

sampledb> \d mytable;

Ergebnis

Die obige Abfrage generiert das folgende Ergebnis.

ERROR: relation 'mytable' does not exist

Sie können die Abfrage auch mit dem Befehl "\ d" überprüfen, um die verfügbaren Tajo-Tabellen aufzulisten.