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.