Apache Tajo - instrukcje SQL

W poprzednim rozdziale zrozumiałeś, jak tworzyć tabele w Tajo. Ten rozdział wyjaśnia o instrukcji SQL w Tajo.

Utwórz instrukcję tabeli

Przed przejściem do tworzenia tabeli utwórz plik tekstowy „Students.csv” w ścieżce katalogu instalacyjnego Tajo w następujący sposób -

students.csv

ID Nazwa Adres Wiek Znaki
1 Adam 23 Nowa ulica 21 90
2 Amit 12 Old Street 13 95
3 Pion 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 Jacek 2 Park Street 12 60
8 Leena 24 South Street 12 70
9 Mary 5 West Street 12 75
10 Piotr 16 Park Avenue 12 95

Po utworzeniu pliku przejdź do terminala i uruchom serwer Tajo i powłoki jeden po drugim.

Utwórz bazę danych

Utwórz nową bazę danych za pomocą następującego polecenia -

Pytanie

default> create database sampledb; 
OK

Połącz się z bazą danych „sampledb”, która została właśnie utworzona.

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

Następnie utwórz tabelę w „sampledb” w następujący sposób -

Pytanie

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

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

OK

Tutaj tworzona jest zewnętrzna tabela. Teraz wystarczy wpisać lokalizację pliku. Jeśli musisz przypisać tabelę z hdfs, użyj hdfs zamiast file.

Następnie “students.csv”plik zawiera wartości oddzielone przecinkami. Pliktext.delimiter pole jest przypisane do „,”.

Utworzyłeś teraz „mytable” w „sampledb”.

Pokaż tabelę

Aby wyświetlić tabele w Tajo, użyj następującego zapytania.

Pytanie

sampledb> \d  
mytable  
sampledb> \d mytable

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

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

Tabela listy

Aby pobrać wszystkie rekordy w tabeli, wpisz następujące zapytanie -

Pytanie

sampledb> select * from mytable;

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

Wstaw instrukcję tabeli

Tajo używa następującej składni do wstawiania rekordów do tabeli.

Składnia

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;

Instrukcja wstawiania Tajo jest podobna do instrukcji INSERT INTO SELECT instrukcja SQL.

Pytanie

Utwórzmy tabelę, aby zastąpić dane istniejącej tabeli.

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

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

mytable 
test

Wstaw rekordy

Aby wstawić rekordy do tabeli „test”, wpisz następujące zapytanie.

Pytanie

sampledb> insert overwrite into test select * from mytable;

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

Progress: 100%, response time: 0.518 sec

W tym przypadku rekordy „mytable” zastępują tabelę „test”. Jeśli nie chcesz tworzyć tabeli „testowej”, od razu przypisz lokalizację ścieżki fizycznej, jak wspomniano w alternatywnej opcji zapytania wstawiania.

Pobierz rekordy

Użyj następującego zapytania, aby wyświetlić wszystkie rekordy w tabeli „test” -

Pytanie

sampledb> select * from test;

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

Ta instrukcja służy do dodawania, usuwania lub modyfikowania kolumn istniejącej tabeli.

Aby zmienić nazwę tabeli, użyj następującej składni -

Alter table table1 RENAME TO table2;

Pytanie

sampledb> alter table test rename to students;

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

OK

Aby sprawdzić zmienioną nazwę tabeli, użyj następującego zapytania.

sampledb> \d  
mytable 
students

Teraz tabela „test” zostaje zmieniona na tabelę „uczniowie”.

Dodaj kolumnę

Aby wstawić nową kolumnę w tabeli „uczniowie”, wpisz następującą składnię -

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

Pytanie

sampledb> alter table students add column grade text;

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

OK

Ustaw właściwość

Ta właściwość służy do zmiany właściwości tabeli.

Pytanie

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

Tutaj przypisywany jest typ kompresji i właściwości kodeka.

Aby zmienić właściwość separatora tekstu, użyj następującego -

Pytanie

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

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

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

Powyższy wynik pokazuje, że właściwości tabeli są zmieniane za pomocą właściwości „SET”.

Wybierz instrukcję

Instrukcja SELECT służy do wybierania danych z bazy danych.

Składnia instrukcji Select jest następująca -

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

Where Clause

Klauzula Where służy do filtrowania rekordów z tabeli.

Pytanie

sampledb> select * from mytable where id > 5;

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

Zapytanie zwraca rekordy tych uczniów, których identyfikator jest większy niż 5.

Pytanie

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

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

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

Wynik filtruje tylko rekordy Petera.

Klauzula odrębna

Kolumna tabeli może zawierać zduplikowane wartości. Słowo kluczowe DISTINCT może służyć do zwracania tylko odrębnych (różnych) wartości.

Składnia

SELECT DISTINCT column1,column2 FROM table_name;

Pytanie

sampledb> select distinct age from mytable;

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

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

Zapytanie zwraca odrębny wiek uczniów z mytable.

Grupa według klauzuli

Klauzula GROUP BY jest używana we współpracy z instrukcją SELECT w celu uporządkowania identycznych danych w grupy.

Składnia

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

Pytanie

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

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

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

W tym przypadku kolumna „mytable” zawiera dwa typy wieku - 12 i 13 lat. Teraz zapytanie grupuje rekordy według wieku i tworzy sumę ocen dla odpowiedniego wieku uczniów.

Posiadanie klauzuli

Klauzula HAVING umożliwia określenie warunków filtrujących wyniki grup, które pojawiają się w wynikach końcowych. Klauzula WHERE umieszcza warunki w wybranych kolumnach, podczas gdy klauzula HAVING umieszcza warunki w grupach utworzonych klauzulą ​​GROUP BY.

Składnia

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

Pytanie

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

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

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

Zapytanie grupuje rekordy według wieku i zwraca wiek, gdy suma wyniku warunku (znak)> 200.

Zamów według klauzuli

Klauzula ORDER BY służy do sortowania danych w porządku rosnącym lub malejącym, na podstawie co najmniej jednej kolumny. Baza danych Tajo domyślnie sortuje wyniki zapytań w porządku rosnącym.

Składnia

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

Pytanie

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

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

Zapytanie zwraca nazwiska tych uczniów w porządku malejącym, których oceny są większe niż 60.

Utwórz instrukcję indeksu

Instrukcja CREATE INDEX służy do tworzenia indeksów w tabelach. Indeks służy do szybkiego wyszukiwania danych. Bieżąca wersja obsługuje indeksowanie tylko dla zwykłych formatów TEXT przechowywanych na HDFS.

Składnia

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

Pytanie

create index student_index on mytable(id);

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

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

Aby wyświetlić przypisany indeks do kolumny, wpisz następujące zapytanie.

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 )

Tutaj metoda TWO_LEVEL_BIN_TREE jest używana domyślnie w Tajo.

Instrukcja Drop Table

Instrukcja Drop Table służy do usuwania tabeli z bazy danych.

Składnia

drop table table name;

Pytanie

sampledb> drop table mytable;

Aby sprawdzić, czy tabela została usunięta z tabeli, wpisz następujące zapytanie.

sampledb> \d mytable;

Wynik

Powyższe zapytanie wygeneruje następujący wynik.

ERROR: relation 'mytable' does not exist

Możesz również sprawdzić zapytanie za pomocą polecenia „\ d”, aby wyświetlić listę dostępnych tabel Tajo.