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.