Apache Tajo - Szybki przewodnik
Rozproszony system hurtowni danych
Hurtownia danych to relacyjna baza danych, która jest przeznaczona do zapytań i analiz, a nie do przetwarzania transakcji. Jest to zorientowany podmiotowo, zintegrowany, zmienny w czasie i nieulotny zbiór danych. Dane te pomagają analitykom w podejmowaniu świadomych decyzji w organizacji, ale ilość danych relacyjnych rośnie z dnia na dzień.
Aby sprostać wyzwaniom, rozproszony system hurtowni danych udostępnia dane w wielu repozytoriach danych w celu przetwarzania online (OLAP). Każda hurtownia danych może należeć do jednej lub kilku organizacji. Zapewnia równoważenie obciążenia i skalowalność. Metadane są replikowane i dystrybuowane centralnie.
Apache Tajo to rozproszony system hurtowni danych, który wykorzystuje Hadoop Distributed File System (HDFS) jako warstwę pamięci masowej i ma własny silnik wykonywania zapytań zamiast struktury MapReduce.
Omówienie SQL na Hadoop
Hadoop to platforma typu open source, która umożliwia przechowywanie i przetwarzanie dużych zbiorów danych w środowisku rozproszonym. Jest niezwykle szybki i potężny. Jednak Hadoop ma ograniczone możliwości wykonywania zapytań, więc jego wydajność można zwiększyć jeszcze bardziej za pomocą SQL na Hadoop. Pozwala to użytkownikom na interakcję z Hadoop za pomocą prostych poleceń SQL.
Niektóre przykłady SQL w aplikacjach Hadoop to Hive, Impala, Drill, Presto, Spark, HAWQ i Apache Tajo.
Czym jest Apache Tajo
Apache Tajo to relacyjna i rozproszona platforma przetwarzania danych. Został zaprojektowany z myślą o małych opóźnieniach i skalowalnej analizie zapytań ad hoc.
Tajo obsługuje standardowy SQL i różne formaty danych. Większość zapytań Tajo można wykonać bez żadnych modyfikacji.
Tajo ma fault-tolerance poprzez mechanizm ponownego uruchamiania zadań zakończonych niepowodzeniem i rozszerzalny silnik przepisywania zapytań.
Tajo wykonuje niezbędne czynności ETL (Extract Transform and Load process)operacje podsumowujące duże zbiory danych przechowywane w HDFS. Jest to alternatywa dla Hive / Pig.
Najnowsza wersja Tajo zapewnia lepszą łączność z programami Java i bazami danych innych firm, takimi jak Oracle i PostGreSQL.
Funkcje Apache Tajo
Apache Tajo ma następujące funkcje -
- Doskonała skalowalność i zoptymalizowana wydajność
- Małe opóźnienia
- Funkcje zdefiniowane przez użytkownika
- Struktura przetwarzania pamięci wierszowej / kolumnowej.
- Zgodność z HiveQL i Hive MetaStore
- Prosty przepływ danych i łatwa konserwacja.
Korzyści z Apache Tajo
Apache Tajo oferuje następujące korzyści -
- Łatwy w użyciu
- Uproszczona architektura
- Oparta na kosztach optymalizacja zapytań
- Plan wykonywania zapytań wektoryzowanych
- Szybka dostawa
- Prosty mechanizm we / wy i obsługuje różne typy pamięci.
- Tolerancja błędów
Użyj przypadków Apache Tajo
Oto niektóre przykłady użycia Apache Tajo -
Hurtownie i analiza danych
Koreańska firma SK Telecom porównała Tajo z danymi o wielkości 1,7 terabajta i stwierdziła, że może wykonywać zapytania z większą prędkością niż Hive czy Impala.
Odkrywanie danych
Koreańska usługa strumieniowego przesyłania muzyki Melon używa Tajo do przetwarzania analitycznego. Tajo wykonuje zadania ETL (proces wyodrębniania, transformacji i ładowania) 1,5 do 10 razy szybciej niż Hive.
Analiza dziennika
Bluehole Studio, koreańska firma opracowała TERA - grę online dla wielu graczy fantasy. Firma używa Tajo do analizy logów gry i znajdowania głównych przyczyn zakłóceń jakości usług.
Przechowywanie i formaty danych
Apache Tajo obsługuje następujące formaty danych -
- JSON
- Plik tekstowy (CSV)
- Parquet
- Plik sekwencji
- AVRO
- Bufor protokołu
- Apache Orc
Tajo obsługuje następujące formaty przechowywania -
- HDFS
- JDBC
- Amazon S3
- Apache HBase
- Elasticsearch
Poniższa ilustracja przedstawia architekturę Apache Tajo.
Poniższa tabela szczegółowo opisuje każdy z elementów.
S.No. | Opis podzespołu |
---|---|
1 | Client Client przesyła instrukcje SQL do Tajo Master, aby uzyskać wynik. |
2 | Master Mistrz jest głównym demonem. Odpowiada za planowanie zapytań i jest koordynatorem dla pracowników. |
3 | Catalog server Utrzymuje opisy tabel i indeksów. Jest osadzony w demonie Master. Serwer katalogu używa Apache Derby jako warstwy magazynowania i łączy się za pośrednictwem klienta JDBC. |
4 | Worker Węzeł główny przypisuje zadania do węzłów roboczych. TajoWorker przetwarza dane. Wraz ze wzrostem liczby TajoWorkerów, liniowo rośnie również zdolność przetwarzania. |
5 | Query Master Mistrz Tajo przypisuje zapytanie do wzorca zapytań. Query Master jest odpowiedzialny za kontrolowanie rozproszonego planu wykonania. Uruchamia TaskRunner i planuje zadania do TaskRunner. Główną rolą Query Master jest monitorowanie uruchomionych zadań i raportowanie ich do węzła Master. |
6 | Node Managers Zarządza zasobami węzła roboczego. Decyduje o przydzielaniu żądań do węzła. |
7 | TaskRunner Działa jako lokalny silnik wykonywania zapytań. Służy do uruchamiania i monitorowania procesu zapytań. TaskRunner przetwarza jedno zadanie na raz. Ma następujące trzy główne atrybuty -
|
8 | Query Executor Służy do wykonania zapytania. |
9 | Storage service Łączy podstawowy magazyn danych z Tajo. |
Przepływ pracy
Tajo używa Hadoop Distributed File System (HDFS) jako warstwy magazynu i ma własny silnik wykonywania zapytań zamiast struktury MapReduce. Klaster Tajo składa się z jednego węzła głównego i wielu procesów roboczych w węzłach klastra.
Kapitan jest głównie odpowiedzialny za planowanie zapytań i koordynator ds. Pracowników. Mistrz dzieli zapytanie na małe zadania i przydziela pracownikom. Każdy pracownik ma lokalny silnik zapytań, który wykonuje skierowany acykliczny wykres operatorów fizycznych.
Ponadto Tajo może sterować rozproszonym przepływem danych bardziej elastycznie niż MapReduce i obsługuje techniki indeksowania.
Internetowy interfejs Tajo ma następujące możliwości -
- Możliwość sprawdzenia, jak planowane są składane zapytania
- Możliwość sprawdzenia, w jaki sposób zapytania są dystrybuowane w węzłach
- Możliwość sprawdzenia stanu klastra i węzłów
Aby zainstalować Apache Tajo, musisz mieć w swoim systemie następujące oprogramowanie -
- Wersja Hadoop 2.3 lub nowsza
- Java w wersji 1.7 lub nowszej
- Linux lub Mac OS
Kontynuujmy teraz następujące kroki, aby zainstalować Tajo.
Weryfikacja instalacji Java
Mamy nadzieję, że zainstalowałeś już Javę w wersji 8 na swoim komputerze. Teraz wystarczy kontynuować, weryfikując to.
Aby zweryfikować, użyj następującego polecenia -
$ java -version
Jeśli Java została pomyślnie zainstalowana na twoim komputerze, możesz zobaczyć obecną wersję zainstalowanej Javy. Jeśli Java nie jest zainstalowana, wykonaj następujące kroki, aby zainstalować Javę 8 na komputerze.
Pobierz JDK
Pobierz najnowszą wersję JDK, odwiedzając poniższe łącze, a następnie pobierz najnowszą wersję.
https://www.oracle.com
Najnowsza wersja to JDK 8u 92 a plik to “jdk-8u92-linux-x64.tar.gz”. Pobierz plik na swój komputer. Następnie wyodrębnij pliki i przenieś je do określonego katalogu. Teraz ustaw alternatywy dla Javy. Wreszcie Java jest instalowana na twoim komputerze.
Weryfikacja instalacji Hadoop
Już zainstalowałeś Hadoopw systemie. Teraz sprawdź to za pomocą następującego polecenia -
$ hadoop version
Jeśli wszystko jest w porządku z twoją konfiguracją, możesz zobaczyć wersję Hadoop. Jeśli Hadoop nie jest zainstalowany, pobierz i zainstaluj Hadoop, odwiedzając poniższe łącze -https://www.apache.org
Instalacja Apache Tajo
Apache Tajo zapewnia dwa tryby wykonywania - tryb lokalny i tryb w pełni rozproszony. Po zweryfikowaniu instalacji Java i Hadoop wykonaj następujące kroki, aby zainstalować klaster Tajo na swoim komputerze. Instancja Tajo w trybie lokalnym wymaga bardzo łatwej konfiguracji.
Pobierz najnowszą wersję Tajo, odwiedzając poniższy link - https://www.apache.org/dyn/closer.cgi/tajo
Teraz możesz pobrać plik “tajo-0.11.3.tar.gz” z twojej maszyny.
Wyodrębnij plik tar
Wyodrębnij plik tar za pomocą następującego polecenia -
$ cd opt/ $ tar tajo-0.11.3.tar.gz
$ cd tajo-0.11.3
Ustaw zmienną środowiskową
Dodaj następujące zmiany do “conf/tajo-env.sh” plik
$ cd tajo-0.11.3
$ vi conf/tajo-env.sh
# Hadoop home. Required
export HADOOP_HOME = /Users/path/to/Hadoop/hadoop-2.6.2
# The java implementation to use. Required.
export JAVA_HOME = /path/to/jdk1.8.0_92.jdk/
Tutaj musisz określić ścieżkę do platformy Hadoop i Java “tajo-env.sh”plik. Po wprowadzeniu zmian zapisz plik i zamknij terminal.
Uruchom Tajo Server
Aby uruchomić serwer Tajo, wykonaj następujące polecenie -
$ bin/start-tajo.sh
Otrzymasz odpowiedź podobną do następującej -
Starting single TajoMaster
starting master, logging to /Users/path/to/Tajo/tajo-0.11.3/bin/../
localhost: starting worker, logging to /Users/path/toe/Tajo/tajo-0.11.3/bin/../logs/
Tajo master web UI: http://local:26080
Tajo Client Service: local:26002
Teraz wpisz polecenie „jps”, aby zobaczyć działające demony.
$ jps
1010 TajoWorker
1140 Jps
933 TajoMaster
Uruchom Tajo Shell (Tsql)
Aby uruchomić klienta powłoki Tajo, użyj następującego polecenia -
$ bin/tsql
Otrzymasz następujący wynik -
welcome to
_____ ___ _____ ___
/_ _/ _ |/_ _/ /
/ // /_| |_/ // / /
/_//_/ /_/___/ \__/ 0.11.3
Try \? for help.
Zamknij Tajo Shell
Wykonaj następujące polecenie, aby wyjść z Tsql -
default> \q
bye!
Tutaj domyślnie odnosi się do katalogu w Tajo.
Interfejs sieciowy
Wpisz następujący adres URL, aby uruchomić internetowy interfejs użytkownika Tajo - http://localhost:26080/
Zobaczysz teraz następujący ekran, który jest podobny do opcji ExecuteQuery.
Zatrzymaj Tajo
Aby zatrzymać serwer Tajo, użyj następującego polecenia -
$ bin/stop-tajo.sh
Otrzymasz następującą odpowiedź -
localhost: stopping worker
stopping master
Konfiguracja Tajo jest oparta na systemie konfiguracyjnym Hadoop. W tym rozdziale szczegółowo opisano ustawienia konfiguracyjne Tajo.
Podstawowe ustawienia
Tajo używa następujących dwóch plików konfiguracyjnych -
- catalog-site.xml - konfiguracja dla serwera katalogów.
- tajo-site.xml - konfiguracja dla innych modułów Tajo.
Konfiguracja trybu rozproszonego
Instalacja w trybie rozproszonym działa w rozproszonym systemie plików Hadoop (HDFS). Postępujmy zgodnie z instrukcjami, aby skonfigurować ustawienia trybu rozproszonego Tajo.
tajo-site.xml
Ten plik jest dostępny @ /path/to/tajo/confkatalog i działa jako konfiguracja dla innych modułów Tajo. Aby uzyskać dostęp do Tajo w trybie rozproszonym, zastosuj następujące zmiany do“tajo-site.xml”.
<property>
<name>tajo.rootdir</name>
<value>hdfs://hostname:port/tajo</value>
</property>
<property>
<name>tajo.master.umbilical-rpc.address</name>
<value>hostname:26001</value>
</property>
<property>
<name>tajo.master.client-rpc.address</name>
<value>hostname:26002</value>
</property>
<property>
<name>tajo.catalog.client-rpc.address</name>
<value>hostname:26005</value>
</property>
Konfiguracja węzła głównego
Tajo używa HDFS jako podstawowego typu pamięci. Konfiguracja jest następująca i powinna zostać dodana do“tajo-site.xml”.
<property>
<name>tajo.rootdir</name>
<value>hdfs://namenode_hostname:port/path</value>
</property>
Konfiguracja katalogu
Jeśli chcesz dostosować usługę katalogu, skopiuj $path/to/Tajo/conf/catalogsite.xml.template do $path/to/Tajo/conf/catalog-site.xml iw razie potrzeby dodaj dowolną z poniższych konfiguracji.
Na przykład, jeśli używasz “Hive catalog store” aby uzyskać dostęp do Tajo, konfiguracja powinna wyglądać następująco -
<property>
<name>tajo.catalog.store.class</name>
<value>org.apache.tajo.catalog.store.HCatalogStore</value>
</property>
Jeśli chcesz przechowywać MySQL katalogu, a następnie zastosuj następujące zmiany -
<property>
<name>tajo.catalog.store.class</name>
<value>org.apache.tajo.catalog.store.MySQLStore</value>
</property>
<property>
<name>tajo.catalog.jdbc.connection.id</name>
<value><mysql user name></value>
</property>
<property>
<name>tajo.catalog.jdbc.connection.password</name>
<value><mysql user password></value>
</property>
<property>
<name>tajo.catalog.jdbc.uri</name>
<value>jdbc:mysql://<mysql host name>:<mysql port>/<database name for tajo>
?createDatabaseIfNotExist = true</value>
</property>
Podobnie możesz zarejestrować inne katalogi obsługiwane przez Tajo w pliku konfiguracyjnym.
Konfiguracja pracownika
Domyślnie TajoWorker przechowuje dane tymczasowe w lokalnym systemie plików. Jest zdefiniowany w pliku „tajo-site.xml” w następujący sposób -
<property>
<name>tajo.worker.tmpdir.locations</name>
<value>/disk1/tmpdir,/disk2/tmpdir,/disk3/tmpdir</value>
</property>
Aby zwiększyć wydajność wykonywania zadań każdego zasobu roboczego, wybierz następującą konfigurację -
<property>
<name>tajo.worker.resource.cpu-cores</name>
<value>12</value>
</property>
<property>
<name>tajo.task.resource.min.memory-mb</name>
<value>2000</value>
</property>
<property>
<name>tajo.worker.resource.disks</name>
<value>4</value>
</property>
Aby pracownik Tajo działał w trybie dedykowanym, wybierz następującą konfigurację -
<property>
<name>tajo.worker.resource.dedicated</name>
<value>true</value>
</property>
W tym rozdziale szczegółowo zrozumiemy polecenia Tajo Shell.
Aby wykonać polecenia powłoki Tajo, musisz uruchomić serwer Tajo i powłokę Tajo za pomocą następujących poleceń -
Uruchom serwer
$ bin/start-tajo.sh
Uruchom Shell
$ bin/tsql
Powyższe polecenia są teraz gotowe do wykonania.
Polecenia meta
Omówmy teraz Meta Commands. Polecenia meta Tsql zaczynają się od ukośnika odwrotnego(‘\’).
Pomoc Polecenie
“\?” Polecenie służy do wyświetlania opcji pomocy.
Query
default> \?
Result
Powyższe \?Lista poleceń zawiera wszystkie podstawowe opcje użycia w Tajo. Otrzymasz następujący wynik -
Baza danych list
Aby wyświetlić listę wszystkich baz danych w Tajo, użyj następującego polecenia -
Query
default> \l
Result
Otrzymasz następujący wynik -
information_schema
default
Obecnie nie stworzyliśmy żadnej bazy danych, więc pokazuje dwie wbudowane bazy danych Tajo.
Bieżąca baza danych
\c Opcja służy do wyświetlenia aktualnej nazwy bazy danych.
Query
default> \c
Result
Jesteś teraz połączony z bazą danych „domyślnie” jako „nazwa użytkownika” użytkownika.
Lista wbudowanych funkcji
Aby wyświetlić listę wszystkich funkcji wbudowanych, wpisz zapytanie w następujący sposób -
Query
default> \df
Result
Otrzymasz następujący wynik -
Opisz funkcję
\df function name - To zapytanie zwraca pełny opis podanej funkcji.
Query
default> \df sqrt
Result
Otrzymasz następujący wynik -
Zamknij terminal
Aby zamknąć terminal, wpisz następujące zapytanie -
Query
default> \q
Result
Otrzymasz następujący wynik -
bye!
Komendy administratora
Powłoka Tajo zapewnia \admin opcja wyszczególnienia wszystkich funkcji administratora.
Query
default> \admin
Result
Otrzymasz następujący wynik -
Informacje o klastrze
Aby wyświetlić informacje o klastrze w Tajo, użyj następującego zapytania
Query
default> \admin -cluster
Result
Otrzymasz następujący wynik -
Pokaż mistrza
Następujące zapytanie wyświetla aktualne informacje podstawowe.
Query
default> \admin -showmasters
Result
localhost
Podobnie możesz wypróbować inne polecenia administratora.
Zmienne sesji
Klient Tajo łączy się z Master poprzez unikalny identyfikator sesji. Sesja jest aktywna do momentu rozłączenia lub wygaśnięcia klienta.
Poniższe polecenie służy do wyświetlania listy wszystkich zmiennych sesji.
Query
default> \set
Result
'SESSION_LAST_ACCESS_TIME' = '1470206387146'
'CURRENT_DATABASE' = 'default'
‘USERNAME’ = 'user'
'SESSION_ID' = 'c60c9b20-dfba-404a-822f-182bc95d6c7c'
'TIMEZONE' = 'Asia/Kolkata'
'FETCH_ROWNUM' = '200'
‘COMPRESSED_RESULT_TRANSFER' = 'false'
Plik \set key val ustawi zmienną sesji o nazwie key z wartością val. Na przykład,
Query
default> \set ‘current_database’='default'
Result
usage: \set [[NAME] VALUE]
Tutaj możesz przypisać klucz i wartość w \setKomenda. Jeśli chcesz cofnąć zmiany, użyj rozszerzenia\unset Komenda.
Aby wykonać zapytanie w powłoce Tajo, otwórz terminal i przejdź do katalogu zainstalowanego Tajo, a następnie wpisz następujące polecenie -
$ bin/tsql
Zobaczysz teraz odpowiedź, jak pokazano w następującym programie -
default>
Możesz teraz wykonywać swoje zapytania. W przeciwnym razie możesz uruchamiać zapytania za pośrednictwem aplikacji konsoli internetowej pod następujący adres URL -http://localhost:26080/
Prymitywne typy danych
Apache Tajo obsługuje następującą listę pierwotnych typów danych -
S.No. | Typ danych i opis |
---|---|
1 | integer Służy do przechowywania wartości całkowitej z pamięcią 4 bajtową. |
2 | tinyint Mała liczba całkowita to 1 bajt |
3 | smallint Służy do przechowywania 2-bajtowej liczby całkowitej o małym rozmiarze. |
4 | bigint Wartość całkowita z dużym zakresem ma pamięć 8 bajtów. |
5 | boolean Zwraca prawda / fałsz. |
6 | real Służy do przechowywania prawdziwej wartości. Rozmiar to 4 bajty. |
7 | float Wartość precyzji zmiennoprzecinkowej, która ma 4 lub 8 bajtów przestrzeni dyskowej. |
8 | double Dwupunktowa wartość precyzji przechowywana w 8 bajtach. |
9 | char[(n)] Wartość znaku. |
10 | varchar[(n)] Dane inne niż Unicode o zmiennej długości. |
11 | number Wartości dziesiętne. |
12 | binary Wartości binarne. |
13 | date Data kalendarzowa (rok, miesiąc, dzień). Example - DATA '2016-08-22' |
14 | time Pora dnia (godzina, minuta, sekunda, milisekunda) bez strefy czasowej. Wartości tego typu są analizowane i renderowane w strefie czasowej sesji. |
15 | timezone Pora dnia (godzina, minuta, sekunda, milisekunda) wraz ze strefą czasową. Wartości tego typu są renderowane przy użyciu strefy czasowej z wartości. Example - CZAS '01: 02: 03.456 Azja / Kalkuta ' |
16 | timestamp Natychmiastowy czas obejmujący datę i godzinę bez strefy czasowej. Example - TIMESTAMP '2016-08-22 03: 04: 05.321' |
17 | text Tekst Unicode o zmiennej długości. |
Następujące operatory są używane w Tajo do wykonywania żądanych operacji.
S.No. | Operator i opis |
---|---|
1 | Operatory arytmetyczne Presto obsługuje operatory arytmetyczne, takie jak +, -, *, /,%. |
2 | Operatorzy relacyjni <,>, <=,> =, =, <> |
3 | Operatory logiczne I LUB NIE |
4 | Operatory łańcuchowe „||” Operator wykonuje konkatenację ciągów. |
5 | Operatory zakresu Operator zakresu służy do testowania wartości w określonym zakresie. Tajo obsługuje operatory BETWEEN, IS NULL, IS NOT NULL. |
Do tej pory wiedziałeś o uruchamianiu prostych podstawowych zapytań na Tajo. W następnych kilku rozdziałach omówimy następujące funkcje SQL -
- Funkcje matematyczne
- Funkcje łańcuchowe
- Funkcje daty i godziny
- Funkcje JSON
Funkcje matematyczne działają na formułach matematycznych. Poniższa tabela szczegółowo opisuje listę funkcji.
S.No. | Opis funkcji |
---|---|
1 | abs (x) Zwraca wartość bezwzględną x. |
2 | cbrt (x) Zwraca pierwiastek sześcienny z x. |
3 | sufit (x) Zwraca wartość x zaokrągloną w górę do najbliższej liczby całkowitej. |
4 | piętro (x) Zwraca x zaokrąglone w dół do najbliższej liczby całkowitej. |
5 | Liczba Pi() Zwraca wartość pi. Wynik zostanie zwrócony jako podwójna wartość. |
6 | radiany (x) przekształca kąt x w stopnie w radianach. |
7 | stopnie (x) Zwraca wartość stopnia dla x. |
8 | pow (x, p) Zwraca potęgę value'p 'do wartości x. |
9 | div (x, y) Zwraca wynik dzielenia dla podanych dwóch liczb całkowitych x, y. |
10 | exp (x) Zwraca liczbę Eulera e podniesione do potęgi liczby. |
11 | sqrt (x) Zwraca pierwiastek kwadratowy z x. |
12 | znak (x) Zwraca funkcję signum x, czyli -
|
13 | mod (rzecz., m.) Zwraca moduł (resztę) z n podzielone przez m. |
14 | okrągły (x) Zwraca zaokrągloną wartość x. |
15 | cos (x) Zwraca wartość cosinusa (x). |
16 | asin (x) Zwraca odwrotną wartość sinusa (x). |
17 | acos (x) Zwraca odwrotną wartość cosinusa (x). |
18 | atan (x) Zwraca odwrotną wartość stycznej (x). |
19 | atan2 (y, x) Zwraca odwrotną wartość stycznej (y / x). |
Funkcje typu danych
Poniższa tabela zawiera listę funkcji typu danych dostępnych w Apache Tajo.
S.No. | Opis funkcji |
---|---|
1 | to_bin (x) Zwraca binarną reprezentację liczby całkowitej. |
2 | to_char (int, tekst) Konwertuje liczbę całkowitą na ciąg. |
3 | to_hex (x) Konwertuje wartość x na szesnastkową. |
Poniższa tabela zawiera listę funkcji tekstowych w Tajo.
S.No. | Opis funkcji |
---|---|
1 | concat (ciąg1, ..., ciągN) Połącz podane ciągi. |
2 | długość (ciąg) Zwraca długość podanego ciągu. |
3 | dolny (ciąg) Zwraca format małych liter dla ciągu. |
4 | górny (ciąg) Zwraca format wielkich liter dla podanego ciągu. |
5 | ascii (tekst ciągu) Zwraca kod ASCII pierwszego znaku tekstu. |
6 | bit_length (tekst ciągu) Zwraca liczbę bitów w ciągu. |
7 | char_length (tekst w postaci ciągu) Zwraca liczbę znaków w ciągu. |
8 | długość_oktetu (tekst w postaci ciągu) Zwraca liczbę bajtów w ciągu. |
9 | podsumowanie (tekst wejściowy, tekst metody) Oblicza Digesthash ciągu. Tutaj druga metoda arg odnosi się do metody hash. |
10 | initcap (tekst ciągu) Konwertuje pierwszą literę każdego słowa na wielką. |
11 | md5 (tekst ciągu) Oblicza MD5 hash ciągu. |
12 | left (tekst ciągu, rozmiar int) Zwraca pierwsze n znaków w ciągu. |
13 | right (tekst ciągu, rozmiar int) Zwraca ostatnie n znaków w ciągu. |
14 | zlokalizuj (tekst źródłowy, tekst docelowy, indeks_początkowy) Zwraca lokalizację określonego podciągu. |
15 | strposb (tekst źródłowy, tekst docelowy) Zwraca binarną lokalizację określonego podciągu. |
16 | substr (tekst źródłowy, indeks początkowy, długość) Zwraca podciąg o określonej długości. |
17 | przycinanie (tekst ciągu [, tekst znaków]) Usuwa znaki (domyślnie spację) z początku / końca / obu końców ciągu. |
18 | split_part (tekst ciągu, tekst separatora, int w polu) Dzieli ciąg na separatorze i zwraca dane pole (licząc od jednego). |
19 | regexp_replace (tekst ciągu, tekst wzoru, tekst zastępczy) Zastępuje podciągi dopasowane do podanego wzorca wyrażenia regularnego. |
20 | reverse (ciąg) Operacja odwrotna wykonana dla ciągu. |
Apache Tajo obsługuje następujące funkcje DateTime.
S.No. | Opis funkcji |
---|---|
1 | add_days (data data lub znacznik czasu, int day Zwraca datę dodaną o podaną wartość dnia. |
2 | add_months (data data lub znacznik czasu, int miesiąc) Zwraca datę dodaną o podaną wartość miesiąca. |
3 | bieżąca data() Zwraca dzisiejszą datę. |
4 | Obecny czas() Zwraca dzisiejszy czas. |
5 | wyciąg (wiek od daty / znacznika czasu) Wyodrębnia wiek z podanego parametru. |
6 | wyciąg (dzień od daty / znacznik czasu) Wyodrębnia dzień z podanego parametru. |
7 | wyciąg (dekada od daty / znacznika czasu) Wyodrębnia dekadę z podanego parametru. |
8 | wyodrębnij (dzień dow data / znacznik czasu) Wyodrębnia dzień tygodnia z podanego parametru. |
9 | wyciąg (doy od daty / znacznika czasu) Wyodrębnia dzień roku z podanego parametru. |
10 | wybierz wyciąg (godzina od znacznika czasu) Wydobywa godzinę z podanego parametru. |
11 | wybierz wyciąg (isodow from timestamp) Wyodrębnia dzień tygodnia z podanego parametru. To jest identyczne z dow z wyjątkiem niedzieli. Odpowiada to numeracji dnia tygodnia ISO 8601. |
12 | wybierz wyciąg (izoyear od daty) Wyodrębnia rok ISO z określonej daty. Rok ISO może różnić się od roku gregoriańskiego. |
13 | wyciąg (mikrosekundy od czasu) Wyodrębnia mikrosekundy z podanego parametru. Pole sekund zawierające części ułamkowe pomnożone przez 1 000 000; |
14 | wyciąg (tysiąclecie od znacznika czasu) Wyciąga milenium z podanego parametru. Jedno tysiąclecie odpowiada 1000 lat. Stąd trzecie tysiąclecie rozpoczęło się 1 stycznia 2001 roku. |
15 | wyciąg (w milisekundach od czasu) Wyodrębnia milisekundy z podanego parametru. |
16 | wyciąg (minuta od znacznika czasu) Wyodrębnia minutę z podanego parametru. |
17 | wyciąg (kwartał od znacznika czasu) Wyodrębnia kwartał roku (1 - 4) z podanego parametru. |
18 | date_part (tekst pola, data źródłowa lub znacznik czasu lub godzina) Wyodrębnia pole daty z tekstu. |
19 | teraz() Zwraca aktualny znacznik czasu. |
20 | to_char (sygnatura czasowa, formatowanie tekstu) Konwertuje sygnaturę czasową na tekst. |
21 | to_date (tekst źródłowy, formatowanie tekstu) Konwertuje tekst na aktualny. |
22 | to_timestamp (tekst źródłowy, formatuj tekst) Konwertuje tekst na znacznik czasu. |
Funkcje JSON są wymienione w poniższej tabeli -
S.No. | Opis funkcji |
---|---|
1 | json_extract_path_text (js w tekście, json_path tekst) Wyodrębnia ciąg JSON z ciągu JSON na podstawie określonej ścieżki JSON. |
2 | json_array_get (tekst json_array, indeks int4) Zwraca element o określonym indeksie do tablicy JSON. |
3 | json_array_contains (tekst tablicy json_, wartość dowolna) Sprawdź, czy dana wartość istnieje w tablicy JSON. |
4 | json_array_length (json_ar ray text) Zwraca długość tablicy JSON. |
Ta sekcja wyjaśnia polecenia Tajo DDL. Tajo ma wbudowaną bazę danych o nazwiedefault.
Utwórz instrukcję bazy danych
Create Databaseto instrukcja używana do tworzenia bazy danych w Tajo. Składnia tej instrukcji jest następująca -
CREATE DATABASE [IF NOT EXISTS] <database_name>
Pytanie
default> default> create database if not exists test;
Wynik
Powyższe zapytanie wygeneruje następujący wynik.
OK
Baza danych to przestrzeń nazw w Tajo. Baza danych może zawierać wiele tabel o unikalnej nazwie.
Pokaż aktualną bazę danych
Aby sprawdzić nazwę bieżącej bazy danych, wydaj następujące polecenie -
Pytanie
default> \c
Wynik
Powyższe zapytanie wygeneruje następujący wynik.
You are now connected to database "default" as user “user1".
default>
Połącz się z bazą danych
Do tej pory utworzyłeś bazę danych o nazwie „test”. Poniższa składnia służy do łączenia „testowej” bazy danych.
\c <database name>
Pytanie
default> \c test
Wynik
Powyższe zapytanie wygeneruje następujący wynik.
You are now connected to database "test" as user “user1”.
test>
Możesz teraz zobaczyć zmiany zachęty z domyślnej bazy danych do bazy testowej.
Drop Database
Aby usunąć bazę danych, użyj następującej składni -
DROP DATABASE <database-name>
Pytanie
test> \c default
You are now connected to database "default" as user “user1".
default> drop database test;
Wynik
Powyższe zapytanie wygeneruje następujący wynik.
OK
Tabela to logiczny widok jednego źródła danych. Składa się ze schematu logicznego, partycji, adresu URL i różnych właściwości. Tabela Tajo może być katalogiem w HDFS, pojedynczym plikiem, jedną tabelą HBase lub tabelą RDBMS.
Tajo obsługuje następujące dwa typy tabel -
- stół zewnętrzny
- stół wewnętrzny
Tabela zewnętrzna
Tabela zewnętrzna wymaga właściwości location podczas tworzenia tabeli. Na przykład, jeśli Twoje dane są już tam jako pliki tekstowe / JSON lub tabela HBase, możesz zarejestrować je jako zewnętrzną tabelę Tajo.
Poniższe zapytanie jest przykładem tworzenia tabeli zewnętrznej.
create external table sample(col1 int,col2 text,col3 int) location ‘hdfs://path/to/table';
Tutaj,
External keyword- Służy do tworzenia tabeli zewnętrznej. Pomaga to w utworzeniu tabeli w określonej lokalizacji.
Próbka odnosi się do nazwy tabeli.
Location- Jest to katalog dla HDFS, Amazon S3, HBase lub lokalnego systemu plików. Aby przypisać właściwość lokalizacji katalogom, użyj poniższych przykładów identyfikatorów URI -
HDFS - hdfs: // localhost: port / ścieżka / do / tabeli
Amazon S3 - s3: // nazwa-zasobnika / tabela
local file system - plik: /// ścieżka / do / tabeli
Openstack Swift - swift: // nazwa-zasobnika / tabela
Właściwości tabeli
Tabela zewnętrzna ma następujące właściwości -
TimeZone - Użytkownicy mogą określić strefę czasową do czytania lub pisania tabeli.
Compression format- Służy do zmniejszania rozmiaru danych. Na przykład plik text / json używacompression.codec własność.
Tabela wewnętrzna
Tabela wewnętrzna jest również nazywana Managed Table. Jest tworzony we wstępnie zdefiniowanej fizycznej lokalizacji zwanej Przestrzenią tabel.
Składnia
create table table1(col1 int,col2 text);
Domyślnie Tajo używa „tajo.warehouse.directory” znajdującego się w „conf / tajo-site.xml”. Aby przypisać nową lokalizację tabeli, możesz użyć konfiguracji obszaru tabel.
Przestrzeń tabel
Przestrzeń tabel służy do definiowania lokalizacji w systemie pamięci masowej. Jest obsługiwany tylko dla tabel wewnętrznych. Możesz uzyskać dostęp do obszarów tabel za pomocą ich nazw. Każdy obszar tabel może używać innego typu pamięci. Jeśli wtedy nie określisz obszarów tabel, Tajo użyje domyślnego obszaru tabel w katalogu głównym.
Konfiguracja przestrzeni tabel
Ty masz “conf/tajo-site.xml.template”w Tajo. Skopiuj plik i zmień jego nazwę na“storagesite.json”. Ten plik będzie działał jako konfiguracja dla obszarów tabel. Formaty danych Tajo używają następującej konfiguracji -
Konfiguracja HDFS
$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": {
"uri": “hdfs://localhost:9000/path/to/Tajo"
}
}
}
Konfiguracja HBase
$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": {
"uri": “hbase:zk://quorum1:port,quorum2:port/"
}
}
}
Konfiguracja pliku tekstowego
$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": {
“uri”: “hdfs://localhost:9000/path/to/Tajo”
}
}
}
Tworzenie przestrzeni tabel
Dostęp do wewnętrznych rekordów tabeli Tajo można uzyskać tylko z innej tabeli. Możesz to skonfigurować za pomocą obszaru tabel.
Składnia
CREATE TABLE [IF NOT EXISTS] <table_name> [(column_list)] [TABLESPACE tablespace_name]
[using <storage_type> [with (<key> = <value>, ...)]] [AS <select_statement>]
Tutaj,
IF NOT EXISTS - Pozwala to uniknąć błędu, jeśli ta sama tabela nie została jeszcze utworzona.
TABLESPACE - Ta klauzula służy do przypisywania nazwy obszaru tabel.
Storage type - Dane Tajo obsługują formaty takie jak tekst, JSON, HBase, Parquet, Sequencefile i ORC.
AS select statement - Wybierz rekordy z innej tabeli.
Skonfiguruj przestrzeń tabel
Uruchom usługi Hadoop i otwórz plik “conf/storage-site.json”, a następnie dodaj następujące zmiany -
$ vi conf/storage-site.json {
"spaces": {
“space1”: {
"uri": “hdfs://localhost:9000/path/to/Tajo"
}
}
}
Tutaj Tajo będzie odnosić się do danych z lokalizacji HDFS i space1to nazwa obszaru tabel. Jeśli nie uruchomisz usług Hadoop, nie możesz zarejestrować obszaru tabel.
Pytanie
default> create table table1(num1 int,num2 text,num3 float) tablespace space1;
Powyższe zapytanie tworzy tabelę o nazwie „tabela1”, a „przestrzeń1” odnosi się do nazwy obszaru tabel.
Formaty danych
Tajo obsługuje formaty danych. Przyjrzyjmy się szczegółowo każdemu z formatów.
Tekst
Zwykły plik tekstowy z wartościami rozdzielonymi znakami reprezentuje tabelaryczny zestaw danych składający się z wierszy i kolumn. Każdy wiersz to zwykły wiersz tekstu.
Tworzenie tabeli
default> create external table customer(id int,name text,address text,age int)
using text with('text.delimiter'=',') location ‘file:/Users/workspace/Tajo/customers.csv’;
Tutaj, “customers.csv” plik odnosi się do pliku wartości rozdzielanych przecinkami znajdującego się w katalogu instalacyjnym Tajo.
Aby utworzyć wewnętrzną tabelę przy użyciu formatu tekstowego, użyj następującego zapytania -
default> create table customer(id int,name text,address text,age int) using text;
W powyższym zapytaniu nie przypisałeś żadnej przestrzeni tabel, więc przyjmie domyślną przestrzeń tabel Tajo.
Nieruchomości
Format pliku tekstowego ma następujące właściwości -
text.delimiter- To jest znak ogranicznika. Domyślnie jest to „|”.
compression.codec- To jest format kompresji. Domyślnie jest wyłączony. możesz zmienić ustawienia za pomocą określonego algorytmu.
timezone - Stół używany do czytania lub pisania.
text.error-tolerance.max-num - Maksymalna liczba poziomów tolerancji.
text.skip.headerlines - liczba linii nagłówka na pominięte.
text.serde - To jest właściwość serializacji.
JSON
Apache Tajo obsługuje format JSON do wyszukiwania danych. Tajo traktuje obiekt JSON jako rekord SQL. Jeden obiekt to jeden wiersz w tabeli Tajo. Rozważmy „array.json” w następujący sposób -
$ hdfs dfs -cat /json/array.json {
"num1" : 10,
"num2" : "simple json array",
"num3" : 50.5
}
Po utworzeniu tego pliku przejdź do powłoki Tajo i wpisz następujące zapytanie, aby utworzyć tabelę w formacie JSON.
Pytanie
default> create external table sample (num1 int,num2 text,num3 float)
using json location ‘json/array.json’;
Zawsze pamiętaj, że dane pliku muszą być zgodne ze schematem tabeli. W przeciwnym razie możesz pominąć nazwy kolumn i użyć znaku *, który nie wymaga listy kolumn.
Aby utworzyć wewnętrzną tabelę, użyj następującego zapytania -
default> create table sample (num1 int,num2 text,num3 float) using json;
Parkiet
Parkiet to kolumnowy format przechowywania. Tajo używa formatu Parquet dla łatwego, szybkiego i wydajnego dostępu.
Tworzenie tabeli
Poniższe zapytanie jest przykładem tworzenia tabeli -
CREATE TABLE parquet (num1 int,num2 text,num3 float) USING PARQUET;
Format pliku parkietu ma następujące właściwości -
parquet.block.size - rozmiar grupy wierszy buforowanych w pamięci.
parquet.page.size - Rozmiar strony służy do kompresji.
parquet.compression - Algorytm kompresji używany do kompresji stron.
parquet.enable.dictionary - Wartość logiczna służy do włączania / wyłączania kodowania słownika.
RCFile
RCFile to plik kolumnowy rekordów. Składa się z binarnych par klucz / wartość.
Tworzenie tabeli
Poniższe zapytanie jest przykładem tworzenia tabeli -
CREATE TABLE Record(num1 int,num2 text,num3 float) USING RCFILE;
RCFile ma następujące właściwości -
rcfile.serde - niestandardowa klasa deserializatora.
compression.codec - algorytm kompresji.
rcfile.null - znak NULL.
SequenceFile
SequenceFile to podstawowy format pliku na platformie Hadoop, który składa się z par klucz / wartość.
Tworzenie tabeli
Poniższe zapytanie jest przykładem tworzenia tabeli -
CREATE TABLE seq(num1 int,num2 text,num3 float) USING sequencefile;
Ten plik sekwencji ma zgodność z Hive. Można to zapisać w Hive jako:
CREATE TABLE table1 (id int, name string, score float, type string)
STORED AS sequencefile;
ORC
ORC (Optimized Row Columnar) to kolumnowy format przechowywania z Hive.
Tworzenie tabeli
Poniższe zapytanie jest przykładem tworzenia tabeli -
CREATE TABLE optimized(num1 int,num2 text,num3 float) USING ORC;
Format ORC ma następujące właściwości -
orc.max.merge.distance - Plik ORC jest odczytywany, łączy się, gdy odległość jest mniejsza.
orc.stripe.size - To jest rozmiar każdego paska.
orc.buffer.size - Wartość domyślna to 256 KB.
orc.rowindex.stride - To jest krok indeksu ORC w liczbie wierszy.
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 „z możliwością dopasowania” zastępują tabelę „testową”. 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, które filtrują 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 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.
W tym rozdziale szczegółowo opisano funkcje agregujące i okna.
Funkcje agregujące
Funkcje agregujące generują pojedynczy wynik ze zbioru wartości wejściowych. W poniższej tabeli szczegółowo opisano listę funkcji agregujących.
S.No. | Opis funkcji |
---|---|
1 | AVG (exp) Uśrednia kolumnę wszystkich rekordów w źródle danych. |
2 | CORR (wyrażenie1; wyrażenie2) Zwraca współczynnik korelacji między zbiorem par liczb. |
3 | LICZYĆ() Zwraca liczbę wierszy. |
4 | MAX (wyrażenie) Zwraca największą wartość z wybranej kolumny. |
5 | MIN (wyrażenie) Zwraca najmniejszą wartość z wybranej kolumny. |
6 | SUMA (wyrażenie) Zwraca sumę podanej kolumny. |
7 | LAST_VALUE (wyrażenie) Zwraca ostatnią wartość z podanej kolumny. |
Funkcja okna
Funkcje okna są wykonywane na zestawie wierszy i zwracają pojedynczą wartość dla każdego wiersza z zapytania. Termin okno oznacza zestaw wierszy dla funkcji.
Funkcja Window w zapytaniu definiuje okno za pomocą klauzuli OVER ().
Plik OVER() klauzula ma następujące możliwości -
- Definiuje partycje okien w celu utworzenia grup wierszy. (Klauzula PARTITION BY)
- Zamawia wiersze w ramach partycji. (Klauzula ORDER BY)
W poniższej tabeli opisano szczegółowo funkcje okna.
Funkcjonować | Typ zwrotu | Opis |
---|---|---|
ranga() | int | Zwraca pozycję bieżącego wiersza z przerwami. |
row_num () | int | Zwraca bieżący wiersz w swojej partycji, licząc od 1. |
lead (value [, offset integer [, domyślnie dowolne]]) | Taki sam jak typ danych wejściowych | Zwraca wartość obliczoną w wierszu, który jest przesunięty o wiersze za bieżącym wierszem w partycji. Jeśli nie ma takiego wiersza, zostanie zwrócona wartość domyślna. |
lag (wartość [, offset integer [, domyślnie dowolne]]) | Taki sam jak typ danych wejściowych | Zwraca wartość obliczoną w wierszu, który jest przesunięty o wiersze przed bieżącym wierszem w partycji. |
pierwsza_wartość (wartość) | Taki sam jak typ danych wejściowych | Zwraca pierwszą wartość wierszy wejściowych. |
last_value (wartość) | Taki sam jak typ danych wejściowych | Zwraca ostatnią wartość wierszy wejściowych. |
W tym rozdziale opisano następujące ważne zapytania.
- Predicates
- Explain
- Join
Przejdźmy dalej i wykonajmy zapytania.
Predykaty
Predykat jest wyrażeniem używanym do obliczania wartości prawda / fałsz i NIEZNANY. Predykaty są używane w warunku wyszukiwania klauzul WHERE i HAVING oraz w innych konstrukcjach, w których wymagana jest wartość logiczna.
Predykat IN
Określa, czy wartość wyrażenia do przetestowania pasuje do dowolnej wartości w podzapytaniu lub na liście. Podzapytanie to zwykła instrukcja SELECT, która ma zestaw wyników składający się z jednej kolumny i co najmniej jednego wiersza. Ta kolumna lub wszystkie wyrażenia na liście muszą mieć ten sam typ danych co testowane wyrażenie.
Syntax
IN::=
<expression to test> [NOT] IN (<subquery>)
| (<expression1>,...)
Query
select id,name,address from mytable where id in(2,3,4);
Result
Powyższe zapytanie wygeneruje następujący wynik.
id, name, address
-------------------------------
2, Amit, 12 old street
3, Bob, 10 cross street
4, David, 15 express avenue
Zapytanie zwraca rekordy z mytable dla uczniów id 2, 3 i 4.
Query
select id,name,address from mytable where id not in(2,3,4);
Result
Powyższe zapytanie wygeneruje następujący wynik.
id, name, address
-------------------------------
1, Adam, 23 new street
5, Esha, 20 garden street
6, Ganga, 25 north street
7, Jack, 2 park street
8, Leena, 24 south street
9, Mary, 5 west street
10, Peter, 16 park avenue
Powyższe zapytanie zwraca rekordy z mytable gdzie uczniowie nie są w 2,3 i 4.
Podobnie jak Predicate
Predykat LIKE porównuje ciąg określony w pierwszym wyrażeniu w celu obliczenia wartości ciągu, która jest określana jako wartość do przetestowania, ze wzorcem zdefiniowanym w drugim wyrażeniu w celu obliczenia wartości ciągu.
Wzorzec może zawierać dowolną kombinację symboli wieloznacznych, takich jak -
Symbol podkreślenia (_), którego można użyć zamiast dowolnego pojedynczego znaku w testowanej wartości.
Znak procentu (%), który zastępuje dowolny ciąg zero lub więcej znaków w testowanej wartości.
Syntax
LIKE::=
<expression for calculating the string value>
[NOT] LIKE
<expression for calculating the string value>
[ESCAPE <symbol>]
Query
select * from mytable where name like ‘A%';
Result
Powyższe zapytanie wygeneruje następujący wynik.
id, name, address, age, mark
-------------------------------
1, Adam, 23 new street, 12, 90
2, Amit, 12 old street, 13, 95
Zapytanie zwraca rekordy z mytable tych uczniów, których imiona zaczynają się na literę „A”.
Query
select * from mytable where name like ‘_a%';
Result
Powyższe zapytanie wygeneruje następujący wynik.
id, name, address, age, mark
——————————————————————————————————————-
4, David, 15 express avenue, 12, 85
6, Ganga, 25 north street, 12, 55
7, Jack, 2 park street, 12, 60
9, Mary, 5 west street, 12, 75
Zapytanie zwraca rekordy z mytable tych uczniów, których imiona zaczynają się od „a” jako drugiego znaku.
Używanie wartości NULL w warunkach wyszukiwania
Zrozummy teraz, jak używać wartości NULL w warunkach wyszukiwania.
Syntax
Predicate
IS [NOT] NULL
Query
select name from mytable where name is not null;
Result
Powyższe zapytanie wygeneruje następujący wynik.
name
-------------------------------
Adam
Amit
Bob
David
Esha
Ganga
Jack
Leena
Mary
Peter
(10 rows, 0.076 sec, 163 B selected)
Tutaj wynik jest prawdziwy, więc zwraca wszystkie nazwy z tabeli.
Query
Sprawdźmy teraz zapytanie z warunkiem NULL.
default> select name from mytable where name is null;
Result
Powyższe zapytanie wygeneruje następujący wynik.
name
-------------------------------
(0 rows, 0.068 sec, 0 B selected)
Wyjaśnić
Explainsłuży do uzyskania planu wykonania zapytania. Przedstawia logiczny i globalny plan wykonania instrukcji.
Zapytanie dotyczące planu logicznego
explain select * from mytable;
explain
-------------------------------
=> target list: default.mytable.id (INT4), default.mytable.name (TEXT),
default.mytable.address (TEXT), default.mytable.age (INT4), default.mytable.mark (INT4)
=> out schema: {
(5) default.mytable.id (INT4), default.mytable.name (TEXT), default.mytable.address (TEXT),
default.mytable.age (INT4), default.mytable.mark (INT4)
}
=> in schema: {
(5) default.mytable.id (INT4), default.mytable.name (TEXT), default.mytable.address (TEXT),
default.mytable.age (INT4), default.mytable.mark (INT4)
}
Result
Powyższe zapytanie wygeneruje następujący wynik.
Wynik zapytania przedstawia logiczny format planu dla danej tabeli. Plan logiczny zwraca następujące trzy wyniki -
- Lista docelowa
- Nasz schemat
- W schemacie
Zapytanie dotyczące planu globalnego
explain global select * from mytable;
explain
-------------------------------
-------------------------------------------------------------------------------
Execution Block Graph (TERMINAL - eb_0000000000000_0000_000002)
-------------------------------------------------------------------------------
|-eb_0000000000000_0000_000002
|-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
1: eb_0000000000000_0000_000001
2: eb_0000000000000_0000_000002
-------------------------------------------------------------------------------
=======================================================
Block Id: eb_0000000000000_0000_000001 [ROOT]
=======================================================
SCAN(0) on default.mytable
=> target list: default.mytable.id (INT4), default.mytable.name (TEXT),
default.mytable.address (TEXT), default.mytable.age (INT4), default.mytable.mark (INT4)
=> out schema: {
(5) default.mytable.id (INT4), default.mytable.name (TEXT),default.mytable.address (TEXT),
default.mytable.age (INT4), default.mytable.mark (INT4)
}
=> in schema: {
(5) default.mytable.id (INT4), default.mytable.name (TEXT), default.mytable.address (TEXT),
default.mytable.age (INT4), default.mytable.mark (INT4)
}
=======================================================
Block Id: eb_0000000000000_0000_000002 [TERMINAL]
=======================================================
(24 rows, 0.065 sec, 0 B selected)
Result
Powyższe zapytanie wygeneruje następujący wynik.
Tutaj plan globalny pokazuje identyfikator bloku wykonania, kolejność wykonywania i informacje o nim.
Łączy
Łączenia SQL służą do łączenia wierszy z dwóch lub więcej tabel. Poniżej przedstawiono różne typy połączeń SQL -
- Połączenie wewnętrzne
- {LEFT | PRAWO | FULL} OUTER JOIN
- Łączenie krzyżowe
- Dołącz do siebie
- Połączenie naturalne
Aby wykonać operacje łączenia, rozważ dwie poniższe tabele.
Tabela 1 - Klienci
ID | Nazwa | Adres | Wiek |
---|---|---|---|
1 | Klient 1 | 23 Old Street | 21 |
2 | Klient 2 | 12 New Street | 23 |
3 | Klient 3 | 10 Express Avenue | 22 |
4 | Klient 4 | 15 Express Avenue | 22 |
5 | Klient 5 | 20 Garden Street | 33 |
6 | Klient 6 | 21 North Street | 25 |
Table2 - customer_order
ID | Identyfikator zamówienia | Emp Id |
---|---|---|
1 | 1 | 101 |
2 | 2 | 102 |
3 | 3 | 103 |
4 | 4 | 104 |
5 | 5 | 105 |
Przejdźmy teraz i wykonaj operacje łączenia SQL na dwóch powyższych tabelach.
Połączenie wewnętrzne
Sprzężenie wewnętrzne wybiera wszystkie wiersze z obu tabel, gdy istnieje zgodność między kolumnami w obu tabelach.
Syntax
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
Query
default> select c.age,c1.empid from customers c inner join customer_order c1 on c.id = c1.id;
Result
Powyższe zapytanie wygeneruje następujący wynik.
age, empid
-------------------------------
21, 101
23, 102
22, 103
22, 104
33, 105
Zapytanie dopasowuje pięć wierszy z obu tabel. W związku z tym zwraca wiek dopasowanych wierszy z pierwszej tabeli.
Lewe połączenie zewnętrzne
Lewe sprzężenie zewnętrzne zachowuje wszystkie wiersze „lewej” tabeli, niezależnie od tego, czy istnieje wiersz, który pasuje do „prawej” tabeli, czy nie.
Query
select c.name,c1.empid from customers c left outer join customer_order c1 on c.id = c1.id;
Result
Powyższe zapytanie wygeneruje następujący wynik.
name, empid
-------------------------------
customer1, 101
customer2, 102
customer3, 103
customer4, 104
customer5, 105
customer6,
W tym przypadku lewe sprzężenie zewnętrzne zwraca wiersze kolumn z nazwami z tabeli klientów (po lewej) i wiersze dopasowane do kolumn empid z tabeli customer_order (po prawej).
Prawe połączenie zewnętrzne
Prawe sprzężenie zewnętrzne zachowuje wszystkie wiersze „prawej” tabeli, niezależnie od tego, czy istnieje wiersz, który pasuje do „lewej” tabeli.
Query
select c.name,c1.empid from customers c right outer join customer_order c1 on c.id = c1.id;
Result
Powyższe zapytanie wygeneruje następujący wynik.
name, empid
-------------------------------
customer1, 101
customer2, 102
customer3, 103
customer4, 104
customer5, 105
W tym przypadku prawe sprzężenie zewnętrzne zwraca empid wiersze z tabeli customer_order (po prawej) i wiersze zgodne z kolumną nazwy z tabeli klientów.
Pełne połączenie zewnętrzne
Pełne łączenie zewnętrzne zachowuje wszystkie wiersze z lewej i prawej tabeli.
Query
select * from customers c full outer join customer_order c1 on c.id = c1.id;
Result
Powyższe zapytanie wygeneruje następujący wynik.
Zapytanie zwraca wszystkie pasujące i niepasujące wiersze zarówno z tabel customer, jak i customer_order.
Łączenie krzyżowe
Zwraca iloczyn kartezjański zestawów rekordów z dwóch lub więcej połączonych tabel.
Syntax
SELECT * FROM table1 CROSS JOIN table2;
Query
select orderid,name,address from customers,customer_order;
Result
Powyższe zapytanie wygeneruje następujący wynik.
Powyższe zapytanie zwraca iloczyn kartezjański tabeli.
Naturalne połączenie
Naturalne łączenie nie używa żadnego operatora porównania. Nie łączy się w sposób, w jaki robi to produkt kartezjański. Możemy wykonać sprzężenie naturalne tylko wtedy, gdy istnieje co najmniej jeden wspólny atrybut, który istnieje między dwiema relacjami.
Syntax
SELECT * FROM table1 NATURAL JOIN table2;
Query
select * from customers natural join customer_order;
Result
Powyższe zapytanie wygeneruje następujący wynik.
Tutaj istnieje jeden wspólny identyfikator kolumny, który istnieje między dwiema tabelami. Korzystając z tej wspólnej kolumny, plikNatural Join łączy oba stoły.
Dołącz do siebie
SQL SELF JOIN służy do łączenia tabeli ze sobą, tak jakby była to dwie tabele, tymczasowo zmieniając nazwę przynajmniej jednej tabeli w instrukcji SQL.
Syntax
SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_filed = b.common_field
Query
default> select c.id,c1.name from customers c, customers c1 where c.id = c1.id;
Result
Powyższe zapytanie wygeneruje następujący wynik.
id, name
-------------------------------
1, customer1
2, customer2
3, customer3
4, customer4
5, customer5
6, customer6
Zapytanie łączy ze sobą tabelę klientów.
Tajo obsługuje różne formaty przechowywania. Aby zarejestrować konfigurację wtyczki magazynu, należy dodać zmiany do pliku konfiguracyjnego „storage-site.json”.
storage-site.json
Struktura jest zdefiniowana w następujący sposób -
{
"storages": {
“storage plugin name“: {
"handler": "${class name}”, "default-format": “plugin name"
}
}
}
Każda instancja magazynu jest identyfikowana przez URI.
Program obsługi pamięci masowej PostgreSQL
Tajo obsługuje moduł obsługi pamięci PostgreSQL. Umożliwia zapytaniom użytkownika dostęp do obiektów bazy danych w PostgreSQL. Jest to domyślny program obsługi pamięci masowej w Tajo, więc możesz go łatwo skonfigurować.
konfiguracja
{
"spaces": {
"postgre": {
"uri": "jdbc:postgresql://hostname:port/database1"
"configs": {
"mapped_database": “sampledb”
"connection_properties": {
"user":“tajo", "password": "pwd"
}
}
}
}
}
Tutaj, “database1” odnosi się do postgreSQL baza danych, która jest mapowana na bazę danych “sampledb” w Tajo.
Apache Tajo obsługuje integrację HBase. To umożliwia nam dostęp do tabel HBase w Tajo. HBase to rozproszona, zorientowana na kolumny baza danych zbudowana na bazie systemu plików Hadoop. Jest częścią ekosystemu Hadoop, który zapewnia losowy dostęp do odczytu / zapisu w czasie rzeczywistym do danych w systemie plików Hadoop. Aby skonfigurować integrację HBase, wymagane są następujące kroki.
Ustaw zmienną środowiskową
Dodaj następujące zmiany do pliku „conf / tajo-env.sh”.
$ vi conf/tajo-env.sh
# HBase home directory. It is opitional but is required mandatorily to use HBase.
# export HBASE_HOME = path/to/HBase
Po dołączeniu ścieżki HBase, Tajo ustawi plik biblioteki HBase na ścieżkę klas.
Utwórz tabelę zewnętrzną
Utwórz tabelę zewnętrzną, używając następującej składni -
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> [(<column_name> <data_type>, ... )]
USING hbase WITH ('table' = '<hbase_table_name>'
, 'columns' = ':key,<column_family_name>:<qualifier_name>, ...'
, 'hbase.zookeeper.quorum' = '<zookeeper_address>'
, 'hbase.zookeeper.property.clientPort' = '<zookeeper_client_port>')
[LOCATION 'hbase:zk://<hostname>:<port>/'] ;
Aby uzyskać dostęp do tabel HBase, należy skonfigurować lokalizację obszaru tabel.
Tutaj,
Table- Ustaw nazwę tabeli początkowej hbase. Jeśli chcesz utworzyć tabelę zewnętrzną, musi ona istnieć na serwerze HBase.
Columns- Klucz odnosi się do klucza wiersza HBase. Liczba kolumn musi być równa liczbie kolumn tabeli Tajo.
hbase.zookeeper.quorum - Ustaw adres kworum opiekunów.
hbase.zookeeper.property.clientPort - Ustaw port klienta zookeeper.
Query
CREATE EXTERNAL TABLE students (rowkey text,id int,name text)
USING hbase WITH ('table' = 'students', 'columns' = ':key,info:id,content:name')
LOCATION 'hbase:zk://<hostname>:<port>/';
Tutaj pole Ścieżka lokalizacji ustawia identyfikator portu klienta zookeeper. Jeśli nie ustawisz portu, Tajo odwoła się do właściwości pliku hbase-site.xml.
Utwórz tabelę w HBase
Interaktywną powłokę HBase można uruchomić za pomocą polecenia „hbase shell”, jak pokazano w poniższym zapytaniu.
Query
/bin/hbase shell
Result
Powyższe zapytanie wygeneruje następujący wynik.
hbase(main):001:0>
Kroki do zapytania HBase
Aby wysłać zapytanie do HBase, wykonaj następujące kroki -
Step 1 - Prześlij następujące polecenia do powłoki HBase, aby utworzyć tabelę „samouczka”.
Query
hbase(main):001:0> create ‘students’,{NAME => ’info’},{NAME => ’content’}
put 'students', ‘row-01', 'content:name', 'Adam'
put 'students', ‘row-01', 'info:id', '001'
put 'students', ‘row-02', 'content:name', 'Amit'
put 'students', ‘row-02', 'info:id', '002'
put 'students', ‘row-03', 'content:name', 'Bob'
put 'students', ‘row-03', 'info:id', ‘003'
Step 2 - Teraz wydaj następujące polecenie w powłoce hbase, aby załadować dane do tabeli.
main):001:0> cat ../hbase/hbase-students.txt | bin/hbase shell
Step 3 - Teraz wróć do powłoki Tajo i wykonaj następujące polecenie, aby wyświetlić metadane tabeli -
default> \d students;
table name: default.students
table path:
store type: HBASE
number of rows: unknown
volume: 0 B
Options:
'columns' = ':key,info:id,content:name'
'table' = 'students'
schema:
rowkey TEXT
id INT4
name TEXT
Step 4 - Aby pobrać wyniki z tabeli, użyj następującego zapytania -
Query
default> select * from students
Result
Powyższe zapytanie zwróci następujący wynik -
rowkey, id, name
-------------------------------
row-01, 001, Adam
row-02, 002, Amit
row-03 003, Bob
Tajo obsługuje HiveCatalogStore w celu integracji z Apache Hive. Ta integracja umożliwia Tajo dostęp do tabel w Apache Hive.
Ustaw zmienną środowiskową
Dodaj następujące zmiany do pliku „conf / tajo-env.sh”.
$ vi conf/tajo-env.sh
export HIVE_HOME = /path/to/hive
Po dołączeniu ścieżki Hive Tajo ustawi plik biblioteki Hive na ścieżkę klas.
Konfiguracja katalogu
Dodaj następujące zmiany do pliku „conf / catalog-site.xml”.
$ vi conf/catalog-site.xml
<property>
<name>tajo.catalog.store.class</name>
<value>org.apache.tajo.catalog.store.HiveCatalogStore</value>
</property>
Po skonfigurowaniu HiveCatalogStore można uzyskać dostęp do tabeli Hive w Tajo.
Swift to rozproszony i spójny magazyn obiektów / obiektów blob. Swift oferuje oprogramowanie do przechowywania w chmurze, dzięki czemu możesz przechowywać i pobierać wiele danych za pomocą prostego interfejsu API. Tajo obsługuje integrację Swift.
Poniżej przedstawiono warunki wstępne Swift Integration -
- Swift
- Hadoop
Core-site.xml
Dodaj następujące zmiany do pliku hadoop „core-site.xml” -
<property>
<name>fs.swift.impl</name>
<value>org.apache.hadoop.fs.swift.snative.SwiftNativeFileSystem</value>
<description>File system implementation for Swift</description>
</property>
<property>
<name>fs.swift.blocksize</name>
<value>131072</value>
<description>Split size in KB</description>
</property>
Będzie to używane dla Hadoop, aby uzyskać dostęp do obiektów Swift. Po dokonaniu wszystkich zmian przejdź do katalogu Tajo, aby ustawić zmienną środowiskową Swift.
conf / tajo-env.h
Otwórz plik konfiguracyjny Tajo i dodaj ustaw zmienną środowiskową w następujący sposób -
$ vi conf/tajo-env.h export TAJO_CLASSPATH = $HADOOP_HOME/share/hadoop/tools/lib/hadoop-openstack-x.x.x.jar
Teraz Tajo będzie w stanie przeszukiwać dane za pomocą Swift.
Utwórz tabelę
Utwórzmy zewnętrzną tabelę, aby uzyskać dostęp do obiektów Swift w Tajo w następujący sposób -
default> create external table swift(num1 int, num2 text, num3 float)
using text with ('text.delimiter' = '|') location 'swift://bucket-name/table1';
Po utworzeniu tabeli można uruchamiać zapytania SQL.
Apache Tajo zapewnia interfejs JDBC do łączenia i wykonywania zapytań. Możemy użyć tego samego interfejsu JDBC do połączenia Tajo z naszej aplikacji opartej na Javie. Zrozummy teraz, jak połączyć Tajo i wykonać polecenia w naszej przykładowej aplikacji Java przy użyciu interfejsu JDBC w tej sekcji.
Pobierz sterownik JDBC
Pobierz sterownik JDBC, odwiedzając poniższe łącze - http://apache.org/dyn/closer.cgi/tajo/tajo-0.11.3/tajo-jdbc-0.11.3.jar.
Teraz plik „tajo-jdbc-0.11.3.jar” został pobrany na twój komputer.
Ustaw ścieżkę klasy
Aby skorzystać ze sterownika JDBC w programie, ustaw ścieżkę klasy w następujący sposób -
CLASSPATH = path/to/tajo-jdbc-0.11.3.jar:$CLASSPATH
Połącz się z Tajo
Apache Tajo dostarcza sterownik JDBC jako pojedynczy plik jar i jest on dostępny @ /path/to/tajo/share/jdbc-dist/tajo-jdbc-0.11.3.jar.
Parametry połączenia do podłączenia Apache Tajo mają następujący format -
jdbc:tajo://host/
jdbc:tajo://host/database
jdbc:tajo://host:port/
jdbc:tajo://host:port/database
Tutaj,
host - nazwa hosta TajoMaster.
port- numer portu, którego nasłuchuje serwer. Domyślny numer portu to 26002.
database- nazwa bazy danych. Domyślna nazwa bazy danych jest domyślna.
Aplikacja Java
Rozumiemy teraz aplikację Java.
Kodowanie
import java.sql.*;
import org.apache.tajo.jdbc.TajoDriver;
public class TajoJdbcSample {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
try {
Class.forName("org.apache.tajo.jdbc.TajoDriver");
connection = DriverManager.getConnection(“jdbc:tajo://localhost/default");
statement = connection.createStatement();
String sql;
sql = "select * from mytable”;
// fetch records from mytable.
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.print("ID: " + id + ";\nName: " + name + "\n");
}
resultSet.close();
statement.close();
connection.close();
}catch(SQLException sqlException){
sqlException.printStackTrace();
}catch(Exception exception){
exception.printStackTrace();
}
}
}
Aplikację można skompilować i uruchomić za pomocą następujących poleceń.
Kompilacja
javac -cp /path/to/tajo-jdbc-0.11.3.jar:. TajoJdbcSample.java
Wykonanie
java -cp /path/to/tajo-jdbc-0.11.3.jar:. TajoJdbcSample
Wynik
Powyższe polecenia wygenerują następujący wynik -
ID: 1;
Name: Adam
ID: 2;
Name: Amit
ID: 3;
Name: Bob
ID: 4;
Name: David
ID: 5;
Name: Esha
ID: 6;
Name: Ganga
ID: 7;
Name: Jack
ID: 8;
Name: Leena
ID: 9;
Name: Mary
ID: 10;
Name: Peter
Apache Tajo obsługuje funkcje niestandardowe / zdefiniowane przez użytkownika (UDF). Funkcje niestandardowe można tworzyć w języku Python.
Funkcje niestandardowe to po prostu zwykłe funkcje Pythona z dekoratorem “@output_type(<tajo sql datatype>)” w następujący sposób -
@ouput_type(“integer”)
def sum_py(a, b):
return a + b;
Skrypty Pythona z funkcjami UDF można zarejestrować, dodając poniższą konfigurację w “tajosite.xml”.
<property>
<name>tajo.function.python.code-dir</name>
<value>file:///path/to/script1.py,file:///path/to/script2.py</value>
</property>
Po zarejestrowaniu skryptów uruchom ponownie klaster, a funkcje UDF będą dostępne bezpośrednio w zapytaniu SQL w następujący sposób -
select sum_py(10, 10) as pyfn;
Apache Tajo obsługuje również funkcje agregujące zdefiniowane przez użytkownika, ale nie obsługuje funkcji okna zdefiniowanych przez użytkownika.