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 -

  • Plan logiczny - blok wykonawczy, który utworzył zadanie.
  • Fragment - ścieżka wejściowa, zakres przesunięcia i schemat.
  • Pobiera identyfikatory URI
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 -

  • 0, jeśli argumentem jest 0

  • 1, jeśli argument jest większy niż 0

  • 1, jeśli argument jest mniejszy niż 0

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.