Apache Tajo - Краткое руководство

Система распределенных хранилищ данных

Хранилище данных - это реляционная база данных, предназначенная для запросов и анализа, а не для обработки транзакций. Это предметно-ориентированный, интегрированный, изменяющийся во времени и энергонезависимый сбор данных. Эти данные помогают аналитикам принимать обоснованные решения в организации, но объемы реляционных данных увеличиваются день ото дня.

Чтобы решить эти проблемы, система распределенного хранилища данных обменивается данными между несколькими репозиториями данных для целей онлайн-аналитической обработки (OLAP). Каждое хранилище данных может принадлежать одной или нескольким организациям. Он выполняет балансировку нагрузки и масштабируемость. Метаданные реплицируются и распределяются централизованно.

Apache Tajo - это система распределенного хранилища данных, которая использует распределенную файловую систему Hadoop (HDFS) в качестве уровня хранения и имеет собственный механизм выполнения запросов вместо инфраструктуры MapReduce.

Обзор SQL в Hadoop

Hadoop - это платформа с открытым исходным кодом, которая позволяет хранить и обрабатывать большие данные в распределенной среде. Он очень быстрый и мощный. Однако Hadoop имеет ограниченные возможности запросов, поэтому его производительность можно повысить с помощью SQL на Hadoop. Это позволяет пользователям взаимодействовать с Hadoop с помощью простых команд SQL.

Некоторые из примеров SQL в приложениях Hadoop: Hive, Impala, Drill, Presto, Spark, HAWQ и Apache Tajo.

Что такое Apache Tajo

Apache Tajo - это среда для реляционной и распределенной обработки данных. Он разработан для малой задержки и масштабируемого специального анализа запросов.

  • Tajo поддерживает стандартный SQL и различные форматы данных. Большинство запросов Tajo можно выполнить без каких-либо изменений.

  • Тахо имеет fault-tolerance через механизм перезапуска для неудачных задач и расширяемый механизм перезаписи запросов.

  • Тахо выполняет необходимые ETL (Extract Transform and Load process)операции для суммирования больших наборов данных, хранящихся в HDFS. Это альтернатива Hive / Pig.

Последняя версия Tajo имеет улучшенные возможности подключения к программам Java и сторонним базам данных, таким как Oracle и PostGreSQL.

Особенности Apache Tajo

Apache Tajo имеет следующие особенности -

  • Превосходная масштабируемость и оптимизированная производительность
  • Низкая задержка
  • Пользовательские функции
  • Структура обработки хранения строк / столбцов.
  • Совместимость с HiveQL и Hive MetaStore
  • Простой поток данных и простота обслуживания.

Преимущества Apache Tajo

Apache Tajo предлагает следующие преимущества -

  • Легко использовать
  • Упрощенная архитектура
  • Оптимизация запросов на основе затрат
  • План выполнения векторизованного запроса
  • Быстрая доставка
  • Простой механизм ввода-вывода и поддерживает различные типы хранилищ.
  • Отказоустойчивость

Примеры использования Apache Tajo

Ниже приведены некоторые варианты использования Apache Tajo:

Хранилище данных и анализ

Корейская компания SK Telecom обработала Tajo 1,7 терабайта данных и обнаружила, что она может выполнять запросы с большей скоростью, чем Hive или Impala.

Обнаружение данных

Корейский музыкальный потоковый сервис Melon использует Tajo для аналитической обработки. Tajo выполняет задания ETL (процесс извлечения-преобразования-загрузки) в 1,5–10 раз быстрее, чем Hive.

Анализ журнала

Корейская компания Bluehole Studio разработала TERA - фэнтезийную многопользовательскую онлайн-игру. Компания использует Tajo для анализа игрового журнала и поиска основных причин прерывания качества обслуживания.

Хранилище и форматы данных

Apache Tajo поддерживает следующие форматы данных -

  • JSON
  • Текстовый файл (CSV)
  • Parquet
  • Файл последовательности
  • AVRO
  • Буфер протокола
  • Apache Orc

Tajo поддерживает следующие форматы хранения -

  • HDFS
  • JDBC
  • Amazon S3
  • Apache HBase
  • Elasticsearch

На следующем рисунке изображена архитектура Apache Tajo.

В следующей таблице подробно описан каждый из компонентов.

S.No. Компонент и описание
1

Client

Client отправляет операторы SQL в Tajo Master для получения результата.

2

Master

Мастер - главный демон. Он отвечает за планирование запросов и является координатором для работников.

3

Catalog server

Поддерживает описания таблиц и указателей. Он встроен в демон Master. Сервер каталога использует Apache Derby в качестве уровня хранения и подключается через клиент JDBC.

4

Worker

Главный узел назначает задачу рабочим узлам. TajoWorker обрабатывает данные. По мере увеличения числа TajoWorkers производительность обработки также линейно увеличивается.

5

Query Master

Мастер Tajo назначает запрос Мастеру запросов. Мастер запросов отвечает за управление распределенным планом выполнения. Он запускает TaskRunner и планирует задачи в TaskRunner. Основная роль мастера запросов - отслеживать выполняемые задачи и сообщать о них главному узлу.

6

Node Managers

Управляет ресурсом рабочего узла. Он принимает решение о распределении запросов к узлу.

7

TaskRunner

Действует как локальный механизм выполнения запросов. Он используется для запуска и мониторинга процесса запроса. TaskRunner обрабатывает одну задачу за раз.

Он имеет следующие три основных атрибута -

  • Логический план - блок выполнения, создавший задачу.
  • Фрагмент - входной путь, диапазон смещения и схема.
  • Получает URI
8

Query Executor

Он используется для выполнения запроса.

9

Storage service

Подключает базовое хранилище данных к Tajo.

Рабочий процесс

Tajo использует распределенную файловую систему Hadoop (HDFS) в качестве уровня хранения и имеет собственный механизм выполнения запросов вместо платформы MapReduce. Кластер Tajo состоит из одного главного узла и нескольких рабочих узлов в узлах кластера.

Мастер в основном отвечает за планирование запросов и координатор для работников. Мастер делит запрос на небольшие задачи и назначает исполнителей. У каждого рабочего есть локальный механизм запросов, который выполняет направленный ациклический граф физических операторов.

Кроме того, Tajo может управлять распределенным потоком данных более гибко, чем MapReduce, и поддерживает методы индексирования.

Веб-интерфейс Tajo имеет следующие возможности:

  • Возможность узнать, как планируются отправленные запросы
  • Возможность узнать, как запросы распределяются по узлам
  • Возможность проверить статус кластера и узлов

Чтобы установить Apache Tajo, в вашей системе должно быть следующее программное обеспечение:

  • Hadoop версии 2.3 или выше
  • Java версии 1.7 или выше
  • Linux или Mac OS

Теперь давайте продолжим следующие шаги по установке Tajo.

Проверка установки Java

Надеюсь, вы уже установили Java версии 8 на свой компьютер. Теперь вам просто нужно продолжить, проверив его.

Для проверки используйте следующую команду -

$ java -version

Если Java успешно установлена ​​на вашем компьютере, вы можете увидеть текущую версию установленной Java. Если Java не установлена, выполните следующие действия, чтобы установить Java 8 на ваш компьютер.

Скачать JDK

Загрузите последнюю версию JDK, перейдя по следующей ссылке, а затем загрузите последнюю версию.

https://www.oracle.com

Последняя версия JDK 8u 92 и файл “jdk-8u92-linux-x64.tar.gz”. Загрузите файл на свой компьютер. После этого извлеките файлы и переместите их в определенный каталог. Теперь установите альтернативы Java. Наконец, на вашем компьютере установлена ​​Java.

Проверка установки Hadoop

Вы уже установили Hadoopв вашей системе. Теперь проверьте это, используя следующую команду -

$ hadoop version

Если с вашей настройкой все в порядке, вы можете увидеть версию Hadoop. Если Hadoop не установлен, загрузите и установите Hadoop, перейдя по следующей ссылке -https://www.apache.org

Установка Apache Tajo

Apache Tajo предоставляет два режима выполнения - локальный режим и полностью распределенный режим. После проверки установки Java и Hadoop выполните следующие действия, чтобы установить кластер Tajo на ваш компьютер. Экземпляр Tajo в локальном режиме требует очень простых настроек.

Загрузите последнюю версию Tajo, перейдя по следующей ссылке - https://www.apache.org/dyn/closer.cgi/tajo

Теперь вы можете скачать файл “tajo-0.11.3.tar.gz” с вашей машины.

Извлечь файл Tar

Извлеките tar-файл с помощью следующей команды -

$ cd opt/ $ tar tajo-0.11.3.tar.gz 
$ cd tajo-0.11.3

Установить переменную среды

Добавьте следующие изменения в “conf/tajo-env.sh” файл

$ 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/

Здесь вы должны указать путь Hadoop и Java к “tajo-env.sh”файл. После внесения изменений сохраните файл и выйдите из терминала.

Запустить сервер Tajo

Чтобы запустить сервер Tajo, выполните следующую команду -

$ bin/start-tajo.sh

Вы получите ответ, подобный следующему -

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

Теперь введите команду «jps», чтобы увидеть запущенные демоны.

$ jps  
1010 TajoWorker 
1140 Jps 
933 TajoMaster

Запустите Tajo Shell (Tsql)

Чтобы запустить клиент оболочки Tajo, используйте следующую команду -

$ bin/tsql

Вы получите следующий вывод -

welcome to
   _____ ___  _____ ___ 
  /_  _/ _  |/_  _/   / 
   / // /_| |_/ // / / 
  /_//_/ /_/___/ \__/  0.11.3
  
Try \? for help.

Выйти из Tajo Shell

Выполните следующую команду, чтобы выйти из Tsql -

default> \q 
bye!

Здесь значение по умолчанию относится к каталогу в Tajo.

Веб-интерфейс

Введите следующий URL-адрес для запуска веб-интерфейса Tajo - http://localhost:26080/

Теперь вы увидите следующий экран, похожий на параметр ExecuteQuery.

Остановить Тахо

Чтобы остановить сервер Tajo, используйте следующую команду -

$ bin/stop-tajo.sh

Вы получите следующий ответ -

localhost: stopping worker 
stopping master

Конфигурация Tajo основана на системе конфигурации Hadoop. В этой главе подробно описаны настройки конфигурации Tajo.

Базовые настройки

Tajo использует следующие два файла конфигурации -

  • catalog-site.xml - конфигурация для сервера каталога.
  • tajo-site.xml - конфигурация для других модулей Tajo.

Конфигурация распределенного режима

Настройка распределенного режима выполняется в распределенной файловой системе Hadoop (HDFS). Давайте выполним шаги по настройке распределенного режима Tajo.

tajo-site.xml

Этот файл доступен @ /path/to/tajo/confкаталог и действует как конфигурация для других модулей Tajo. Чтобы получить доступ к Tajo в распределенном режиме, примените следующие изменения к“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>

Конфигурация главного узла

Tajo использует HDFS в качестве основного типа хранилища. Конфигурация следующая, ее следует добавить в“tajo-site.xml”.

<property> 
   <name>tajo.rootdir</name> 
   <value>hdfs://namenode_hostname:port/path</value> 
</property>

Конфигурация каталога

Если вы хотите настроить службу каталога, скопируйте $path/to/Tajo/conf/catalogsite.xml.template к $path/to/Tajo/conf/catalog-site.xml и при необходимости добавьте любую из следующих конфигураций.

Например, если вы используете “Hive catalog store” чтобы получить доступ к Tajo, конфигурация должна быть такой:

<property> 
   <name>tajo.catalog.store.class</name> 
   <value>org.apache.tajo.catalog.store.HCatalogStore</value> 
</property>

Если вам нужно хранить MySQL каталог, затем примените следующие изменения -

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

Точно так же вы можете зарегистрировать другие каталоги, поддерживаемые Tajo, в файле конфигурации.

Конфигурация рабочего

По умолчанию TajoWorker хранит временные данные в локальной файловой системе. Он определен в файле «tajo-site.xml» следующим образом:

<property> 
   <name>tajo.worker.tmpdir.locations</name> 
   <value>/disk1/tmpdir,/disk2/tmpdir,/disk3/tmpdir</value> 
</property>

Чтобы увеличить производительность выполняемых задач каждого рабочего ресурса, выберите следующую конфигурацию -

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

Чтобы рабочий Tajo работал в выделенном режиме, выберите следующую конфигурацию -

<property> 
   <name>tajo.worker.resource.dedicated</name> 
   <value>true</value> 
</property>

В этой главе мы подробно разберемся с командами Tajo Shell.

Чтобы выполнить команды оболочки Tajo, вам необходимо запустить сервер Tajo и оболочку Tajo, используя следующие команды:

Запустить сервер

$ bin/start-tajo.sh

Запустить оболочку

$ bin/tsql

Вышеупомянутые команды теперь готовы к выполнению.

Мета-команды

Давайте теперь обсудим Meta Commands. Мета-команды Tsql начинаются с обратной косой черты(‘\’).

Команда помощи

“\?” Команда используется для отображения опции справки.

Query

default> \?

Result

Выше \?Команда перечисляет все основные параметры использования в Tajo. Вы получите следующий вывод -

База данных списка

Чтобы вывести список всех баз данных в Tajo, используйте следующую команду -

Query

default> \l

Result

Вы получите следующий вывод -

information_schema 
default

В настоящее время мы не создали ни одной базы данных, поэтому показаны две встроенные базы данных Tajo.

Текущая база данных

\c опция используется для отображения текущего имени базы данных.

Query

default> \c

Result

Теперь вы подключены к базе данных «default» как пользователь «имя пользователя».

Список встроенных функций

Чтобы вывести список всех встроенных функций, введите следующий запрос:

Query

default> \df

Result

Вы получите следующий вывод -

Опишите функцию

\df function name - Этот запрос возвращает полное описание данной функции.

Query

default> \df sqrt

Result

Вы получите следующий вывод -

Выйти из терминала

Чтобы выйти из терминала, введите следующий запрос -

Query

default> \q

Result

Вы получите следующий вывод -

bye!

Команды администратора

Оболочка Tajo обеспечивает \admin возможность перечислить все функции администратора.

Query

default> \admin

Result

Вы получите следующий вывод -

Информация о кластере

Чтобы отобразить информацию о кластере в Tajo, используйте следующий запрос

Query

default> \admin -cluster

Result

Вы получите следующий вывод -

Показать мастера

Следующий запрос отображает текущую основную информацию.

Query

default> \admin -showmasters

Result

localhost

Точно так же вы можете попробовать другие команды администратора.

Переменные сеанса

Клиент Tajo подключается к Мастеру через уникальный идентификатор сеанса. Сеанс активен, пока клиент не отключится или не истечет срок его действия.

Следующая команда используется для вывода списка всех переменных сеанса.

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'

В \set key val установит переменную сеанса с именем key со значением val. Например,

Query

default> \set ‘current_database’='default'

Result

usage: \set [[NAME] VALUE]

Здесь вы можете назначить ключ и значение в \setкоманда. Если вам нужно отменить изменения, используйте\unset команда.

Чтобы выполнить запрос в оболочке Tajo, откройте свой терминал и перейдите в установленный каталог Tajo, а затем введите следующую команду -

$ bin/tsql

Теперь вы увидите ответ, как показано в следующей программе -

default>

Теперь вы можете выполнять свои запросы. В противном случае вы можете запускать свои запросы через приложение веб-консоли по следующему URL-адресу -http://localhost:26080/

Примитивные типы данных

Apache Tajo поддерживает следующий список примитивных типов данных -

S.No. Тип данных и описание
1

integer

Используется для хранения целочисленных значений с памятью 4 байта.

2

tinyint

Крошечное целочисленное значение - 1 байт

3

smallint

Используется для хранения небольшого целочисленного значения 2 байта.

4

bigint

Целочисленное значение большого диапазона имеет хранилище 8 байтов.

5

boolean

Возвращает истину / ложь.

6

real

Используется для хранения реальной стоимости. Размер 4 байта.

7

float

Значение точности с плавающей запятой, занимающее 4 или 8 байтов.

8

double

Значение точности двойной точки хранится в 8 байтах.

9

char[(n)]

Значение символа.

10

varchar[(n)]

Данные переменной длины не в Юникоде.

11

number

Десятичные значения.

12

binary

Двоичные значения.

13

date

Календарная дата (год, месяц, день).

Example - ДАТА '2016-08-22'

14

time

Время дня (час, минута, секунда, миллисекунда) без часового пояса. Значения этого типа анализируются и отображаются в часовом поясе сеанса.

15

timezone

Время дня (час, минута, секунда, миллисекунда) с часовым поясом. Значения этого типа отображаются с использованием часового пояса из значения.

Example - ВРЕМЯ '01: 02: 03.456 Asia / kolkata '

16

timestamp

Мгновенный по времени, который включает дату и время дня без часового пояса.

Example - TIMESTAMP '2016-08-22 03: 04: 05.321'

17

text

Текст в Юникоде переменной длины.

Следующие операторы используются в Tajo для выполнения желаемых операций.

S.No. Оператор и описание
1 Арифметические операторы

Presto поддерживает арифметические операторы, такие как +, -, *, /,%.

2 Операторы отношения

<,>, <=,> =, =, <>

3 Логические операторы

И, ИЛИ, НЕ

4 Строковые операторы

"||" Оператор выполняет конкатенацию строк.

5 Операторы диапазона

Оператор диапазона используется для проверки значения в определенном диапазоне. Tajo поддерживает операторы BETWEEN, IS NULL, IS NOT NULL.

На данный момент вы знали о выполнении простых базовых запросов в Tajo. В следующих нескольких главах мы обсудим следующие функции SQL:

  • Математические функции
  • Строковые функции
  • Функции DateTime
  • Функции JSON

Математические функции оперируют математическими формулами. В следующей таблице подробно описан список функций.

S.No. Описание функции
1 абс (х)

Возвращает абсолютное значение x.

2 cbrt (x)

Возвращает кубический корень из x.

3 ceil (x)

Возвращает значение x, округленное до ближайшего целого числа.

4 этаж (x)

Возвращает x, округленное в меньшую сторону до ближайшего целого числа.

5 Пи()

Возвращает значение пи. Результат будет возвращен как двойное значение.

6 радианы (х)

преобразует угол x в градусы радианы.

7 градусы (х)

Возвращает значение степени для x.

8 pow (x, p)

Возвращает степень значения p в значение x.

9 div (х, у)

Возвращает результат деления для заданных двух целочисленных значений x, y.

10 ехр (х)

Возвращает число Эйлера. e в степени числа.

11 sqrt (х)

Возвращает квадратный корень из x.

12 знак (х)

Возвращает сигнум-функцию x, то есть -

  • 0, если аргумент 0

  • 1, если аргумент больше 0

  • 1, если аргумент меньше 0

13 мод (п, м)

Возвращает модуль (остаток) от деления n на m.

14 круглый (х)

Возвращает округленное значение x.

15 cos (x)

Возвращает значение косинуса (x).

16 asin (х)

Возвращает значение обратного синуса (x).

17 acos (x)

Возвращает значение обратного косинуса (x).

18 атан (х)

Возвращает значение арктангенса (x).

19 atan2 (у, х)

Возвращает значение арктангенса (y / x).

Функции типов данных

В следующей таблице перечислены функции типов данных, доступные в Apache Tajo.

S.No. Описание функции
1 to_bin (x)

Возвращает двоичное представление целого числа.

2 to_char (число, текст)

Преобразует целое число в строку.

3 to_hex (x)

Преобразует значение x в шестнадцатеричное.

В следующей таблице перечислены строковые функции в Tajo.

S.No. Описание функции
1 concat (строка1, ..., строкаN)

Объедините данные строки.

2 длина (строка)

Возвращает длину заданной строки.

3 нижний (строка)

Возвращает строчный формат строки.

4 верхний (строка)

Возвращает формат заданной строки в верхнем регистре.

5 ascii (текст строки)

Возвращает ASCII-код первого символа текста.

6 bit_length (текст строки)

Возвращает количество бит в строке.

7 char_length (текст строки)

Возвращает количество символов в строке.

8 octet_length (текст строки)

Возвращает количество байтов в строке.

9 дайджест (вводимый текст, текст метода)

Рассчитывает Digestхеш строки. Здесь второй метод arg относится к методу хеширования.

10 initcap (текстовая строка)

Преобразует первую букву каждого слова в верхний регистр.

11 md5 (текстовая строка)

Рассчитывает MD5 хеш строки.

12 left (текст строки, размер int)

Возвращает первые n символов в строке.

13 справа (текст строки, размер int)

Возвращает последние n символов в строке.

14 найти (исходный текст, целевой текст, начальный_индекс)

Возвращает расположение указанной подстроки.

15 strposb (исходный текст, целевой текст)

Возвращает двоичное расположение указанной подстроки.

16 substr (исходный текст, начальный индекс, длина)

Возвращает подстроку указанной длины.

17 обрезать (текст строки [, текст символов])

Удаляет символы (по умолчанию пробел) из начала / конца / обоих концов строки.

18 split_part (текст строки, текст разделителя, поле int)

Разбивает строку по разделителю и возвращает заданное поле (считая от единицы).

19 regexp_replace (текст строки, текст шаблона, текст замены)

Заменяет подстроки, соответствующие заданному шаблону регулярного выражения.

20 обратный (строка)

Для строки выполнена обратная операция.

Apache Tajo поддерживает следующие функции DateTime.

S.No. Описание функции
1 add_days (дата, дата или отметка времени, int день

Возвращает дату, добавленную к заданному значению дня.

2 add_months (дата, дата или временная метка, int месяц)

Возвращает дату, добавленную к заданному значению месяца.

3 текущая дата()

Возвращает сегодняшнюю дату.

4 Текущее время()

Возвращает сегодняшнее время.

5 извлечение (век от даты / времени)

Извлекает век из данного параметра.

6 извлечение (день с даты / отметки времени)

Извлекает день из данного параметра.

7 извлечение (декада от даты / времени)

Извлекает декаду из данного параметра.

8 извлечение (день, дата / время)

Извлекает день недели из данного параметра.

9 извлечь (doy от даты / времени)

Извлекает день года из данного параметра.

10 выберите выдержку (час от отметки времени)

Извлекает час из данного параметра.

11 выберите экстракт (isodow from timestamp)

Извлекает день недели из данного параметра. Это идентично Dow, за исключением воскресенья. Это соответствует нумерации дней недели ISO 8601.

12 выберите экстракт (год от даты)

Извлекает год по ISO из указанной даты. Год по ISO может отличаться от года по григорианскому календарю.

13 извлечение (микросекунды от времени)

Извлекает микросекунды из данного параметра. Поле секунд, включая дробные части, умноженное на 1 000 000;

14 извлечение (тысячелетие из метки времени)

Из данного параметра извлекает тысячелетие. Одно тысячелетие соответствует 1000 годам. Таким образом, третье тысячелетие началось 1 января 2001 года.

15 извлечение (миллисекунды от времени)

Извлекает миллисекунды из данного параметра.

16 извлечение (минута с отметки времени)

Извлекает минуту из данного параметра.

17 извлечение (четверть от отметки времени)

Извлекает квартал года (1–4) из данного параметра.

18 date_part (текст поля, исходная дата или временная метка или время)

Извлекает поле даты из текста.

19 в настоящее время()

Возвращает текущую отметку времени.

20 to_char (отметка времени, формат текста)

Преобразует метку времени в текст.

21 год to_date (текст SRC, формат текста)

Преобразует текст в дату.

22 to_timestamp (текст SRC, формат текста)

Преобразует текст в метку времени.

Функции JSON перечислены в следующей таблице -

S.No. Описание функции
1 json_extract_path_text (js в тексте, json_path текст)

Извлекает строку JSON из строки JSON на основе указанного пути json.

2 json_array_get (текст json_array, индекс int4)

Возвращает элемент по указанному индексу в массив JSON.

3 json_array_contains (текст массива json_, значение любое)

Определите, существует ли данное значение в массиве JSON.

4 json_array_length (текст луча json_ar)

Возвращает длину массива json.

В этом разделе объясняются команды Tajo DDL. Tajo имеет встроенную базу данных под названиемdefault.

Создать инструкцию базы данных

Create Database- это инструкция, используемая для создания базы данных в Tajo. Синтаксис этого оператора следующий:

CREATE DATABASE [IF NOT EXISTS] <database_name>

Запрос

default> default> create database if not exists test;

Результат

Вышеупомянутый запрос даст следующий результат.

OK

База данных - это пространство имен в Tajo. База данных может содержать несколько таблиц с уникальным именем.

Показать текущую базу данных

Чтобы проверить текущее имя базы данных, введите следующую команду -

Запрос

default> \c

Результат

Вышеупомянутый запрос даст следующий результат.

You are now connected to database "default" as user “user1". 
default>

Подключиться к базе данных

На данный момент вы создали базу данных с именем «test». Следующий синтаксис используется для подключения «тестовой» базы данных.

\c <database name>

Query

default> \c test

Result

The above query will generate the following result.

You are now connected to database "test" as user “user1”. 
test>

You can now see the prompt changes from default database to test database.

Drop Database

To drop a database, use the following syntax −

DROP DATABASE <database-name>

Query

test> \c default 
You are now connected to database "default" as user “user1". 
default> drop database test;

Result

The above query will generate the following result.

OK

A table is a logical view of one data source. It consists of a logical schema, partitions, URL, and various properties. A Tajo table can be a directory in HDFS, a single file, one HBase table, or a RDBMS table.

Tajo supports the following two types of tables −

  • external table
  • internal table

External Table

External table needs the location property when the table is created. For example, if your data is already there as Text/JSON files or HBase table, you can register it as Tajo external table.

The following query is an example of external table creation.

create external table sample(col1 int,col2 text,col3 int) location ‘hdfs://path/to/table';

Here,

  • External keyword − This is used to create an external table. This helps to create a table in the specified location.

  • Sample refers to the table name.

  • Location − It is a directory for HDFS,Amazon S3, HBase or local file system. To assign a location property for directories, use the below URI examples −

    • HDFS − hdfs://localhost:port/path/to/table

    • Amazon S3 − s3://bucket-name/table

    • local file system − file:///path/to/table

    • Openstack Swift − swift://bucket-name/table

Table Properties

An external table has the following properties −

  • TimeZone − Users can specify a time zone for reading or writing a table.

  • Compression format − Used to make data size compact. For example, the text/json file uses compression.codec property.

Internal Table

A Internal table is also called an Managed Table. It is created in a pre-defined physical location called the Tablespace.

Syntax

create table table1(col1 int,col2 text);

By default, Tajo uses “tajo.warehouse.directory” located in “conf/tajo-site.xml” . To assign new location for the table, you can use Tablespace configuration.

Tablespace

Tablespace is used to define locations in the storage system. It is supported for only internal tables. You can access the tablespaces by their names. Each tablespace can use a different storage type. If you don’t specify tablespaces then, Tajo uses the default tablespace in the root directory.

Tablespace Configuration

You have “conf/tajo-site.xml.template” in Tajo. Copy the file and rename it to “storagesite.json”. This file will act as a configuration for Tablespaces. Tajo data formats uses the following configuration −

HDFS Configuration

$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": {  
         "uri": “hdfs://localhost:9000/path/to/Tajo"  
      } 
   } 
}

HBase Configuration

$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": {  
         "uri": “hbase:zk://quorum1:port,quorum2:port/"  
      } 
   } 
}

Text File Configuration

$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": {  
         “uri”: “hdfs://localhost:9000/path/to/Tajo” 
      } 
   } 
}

Tablespace Creation

Tajo’s internal table records can be accessed from another table only. You can configure it with tablespace.

Syntax

CREATE TABLE [IF NOT EXISTS] <table_name> [(column_list)] [TABLESPACE tablespace_name] 
[using <storage_type> [with (<key> = <value>, ...)]] [AS <select_statement>]

Here,

  • IF NOT EXISTS − This avoids an error if the same table has not been created already.

  • TABLESPACE − This clause is used to assign the tablespace name.

  • Storage type − Tajo data supports formats like text,JSON,HBase,Parquet,Sequencefile and ORC.

  • AS select statement − Select records from another table.

Configure Tablespace

Start your Hadoop services and open the file “conf/storage-site.json”, then add the following changes −

$ vi conf/storage-site.json { 
   "spaces": {  
      “space1”: {  
         "uri": “hdfs://localhost:9000/path/to/Tajo" 
      } 
   } 
}

Here, Tajo will refer to the data from HDFS location and space1 is the tablespace name. If you do not start Hadoop services, you can’t register tablespace.

Query

default> create table table1(num1 int,num2 text,num3 float) tablespace space1;

The above query creates a table named “table1” and “space1” refers to the tablespace name.

Data formats

Tajo supports data formats. Let’s go through each of the formats one by one in detail.

Text

A character-separated values’ plain text file represents a tabular data set consisting of rows and columns. Each row is a plain text line.

Creating Table

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

Here, “customers.csv” file refers to a comma separated value file located in the Tajo installation directory.

To create internal table using text format, use the following query −

default> create table customer(id int,name text,address text,age int) using text;

In the above query, you have not assigned any tablespace so it will take Tajo’s default tablespace.

Properties

A text file format has the following properties −

  • text.delimiter − This is a delimiter character. Default is ‘|’.

  • compression.codec − This is a compression format. By default, it is disabled. you can change the settings using specified algorithm.

  • timezone − The table used for reading or writing.

  • text.error-tolerance.max-num − The maximum number of tolerance levels.

  • text.skip.headerlines − The number of header lines per skipped.

  • text.serde − This is serialization property.

JSON

Apache Tajo supports JSON format for querying data. Tajo treats a JSON object as SQL record. One object equals one row in a Tajo table. Let’s consider “array.json” as follows −

$ hdfs dfs -cat /json/array.json { 
   "num1" : 10, 
   "num2" : "simple json array", 
   "num3" : 50.5 
}

After you create this file, switch to the Tajo shell and type the following query to create a table using the JSON format.

Query

default> create external table sample (num1 int,num2 text,num3 float) 
   using json location ‘json/array.json’;

Always remember that the file data must match with the table schema. Otherwise, you can omit the column names and use * which doesn’t require columns list.

To create an internal table, use the following query −

default> create table sample (num1 int,num2 text,num3 float) using json;

Parquet

Parquet is a columnar storage format. Tajo uses Parquet format for easy, fast and efficient access.

Table creation

The following query is an example for table creation −

CREATE TABLE parquet (num1 int,num2 text,num3 float) USING PARQUET;

Parquet file format has the following properties −

  • parquet.block.size − size of a row group being buffered in memory.

  • parquet.page.size − The page size is for compression.

  • parquet.compression − The compression algorithm used to compress pages.

  • parquet.enable.dictionary − The boolean value is to enable/disable dictionary encoding.

RCFile

RCFile is the Record Columnar File. It consists of binary key/value pairs.

Table creation

The following query is an example for table creation −

CREATE TABLE Record(num1 int,num2 text,num3 float) USING RCFILE;

RCFile has the following properties −

  • rcfile.serde − custom deserializer class.

  • compression.codec − compression algorithm.

  • rcfile.null − NULL character.

SequenceFile

SequenceFile is a basic file format in Hadoop which consists of key/value pairs.

Table creation

The following query is an example for table creation −

CREATE TABLE seq(num1 int,num2 text,num3 float) USING sequencefile;

This sequence file has Hive compatibility. This can be written in Hive as,

CREATE TABLE table1 (id int, name string, score float, type string) 
STORED AS sequencefile;

ORC

ORC (Optimized Row Columnar) is a columnar storage format from Hive.

Table creation

The following query is an example for table creation −

CREATE TABLE optimized(num1 int,num2 text,num3 float) USING ORC;

The ORC format has the following properties −

  • orc.max.merge.distance − ORC file is read, it merges when the distance is lower.

  • orc.stripe.size − This is the size of each stripe.

  • orc.buffer.size − The default is 256KB.

  • orc.rowindex.stride − This is the ORC index stride in number of rows.

In the previous chapter, you have understood how to create tables in Tajo. This chapter explains about the SQL statement in Tajo.

Create Table Statement

Before moving to create a table, create a text file “students.csv” in Tajo installation directory path as follows −

students.csv

Id Name Address Age Marks
1 Adam 23 New Street 21 90
2 Amit 12 Old Street 13 95
3 Bob 10 Cross Street 12 80
4 David 15 Express Avenue 12 85
5 Esha 20 Garden Street 13 50
6 Ganga 25 North Street 12 55
7 Jack 2 Park Street 12 60
8 Leena 24 South Street 12 70
9 Mary 5 West Street 12 75
10 Peter 16 Park Avenue 12 95

After the file has been created, move to the terminal and start the Tajo server and shell one by one.

Create Database

Create a new database using the following command −

Query

default> create database sampledb; 
OK

Connect to the database “sampledb” which is now created.

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

Then, create a table in “sampledb” as follows −

Query

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

Result

The above query will generate the following result.

OK

Here, the external table is created. Now, you just have to enter the file location. If you have to assign the table from hdfs then use hdfs instead of file.

Next, the “students.csv” file contains comma separated values. The text.delimiter field is assigned with ‘,’.

You have now created “mytable” successfully in “sampledb”.

Show Table

To show tables in Tajo, use the following query.

Query

sampledb> \d  
mytable  
sampledb> \d mytable

Result

The above query will generate the following result.

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

List table

To fetch all the records in the table, type the following query −

Query

sampledb> select * from mytable;

Result

The above query will generate the following result.

Insert Table Statement

Tajo uses the following syntax to insert records in table.

Syntax

create table table1 (col1 int8, col2 text, col3 text);   
--schema should be same for target table schema  
Insert overwrite into table1 select * from table2;  
                     (or)  
Insert overwrite into LOCATION '/dir/subdir' select * from table;

Tajo’s insert statement is similar to the INSERT INTO SELECT statement of SQL.

Query

Let’s create a table to overwrite table data of an existing table.

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

Result

The above query will generate the following result.

mytable 
test

Insert Records

To insert records in the “test” table, type the following query.

Query

sampledb> insert overwrite into test select * from mytable;

Result

The above query will generate the following result.

Progress: 100%, response time: 0.518 sec

Here, “mytable" records overwrite the “test” table. If you don’t want to create the “test” table, then straight away assign the physical path location as mentioned in an alternative option for insert query.

Fetch records

Use the following query to list out all the records in the “test” table −

Query

sampledb> select * from test;

Result

The above query will generate the following result.

This statement is used to add, remove or modify columns of an existing table.

To rename the table use the following syntax −

Alter table table1 RENAME TO table2;

Query

sampledb> alter table test rename to students;

Result

The above query will generate the following result.

OK

To check the changed table name, use the following query.

sampledb> \d  
mytable 
students

Now the table “test” is changed to “students” table.

Add Column

To insert new column in the “students” table, type the following syntax −

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

Query

sampledb> alter table students add column grade text;

Result

The above query will generate the following result.

OK

Set Property

This property is used to change the table’s property.

Query

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

Here, compression type and codec properties are assigned.

To change the text delimiter property, use the following −

Query

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

Result

The above query will generate the following result.

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

The above result shows that the table’s properties are changed using the “SET” property.

Select Statement

The SELECT statement is used to select data from a database.

The syntax for the Select statement is as follows −

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 используется для фильтрации записей из таблицы.

Запрос

sampledb> select * from mytable where id > 5;

Результат

Вышеупомянутый запрос даст следующий результат.

Запрос возвращает записи тех студентов, у которых id больше 5.

Запрос

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

Результат

Вышеупомянутый запрос даст следующий результат.

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

Результат фильтрует только записи Питера.

Особая оговорка

Столбец таблицы может содержать повторяющиеся значения. Ключевое слово DISTINCT может использоваться для возврата только различных (разных) значений.

Синтаксис

SELECT DISTINCT column1,column2 FROM table_name;

Запрос

sampledb> select distinct age from mytable;

Результат

Вышеупомянутый запрос даст следующий результат.

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

Запрос возвращает различный возраст студентов из mytable.

Группировать по пунктам

Предложение GROUP BY используется совместно с оператором SELECT для организации идентичных данных в группы.

Синтаксис

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

Запрос

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

Результат

Вышеупомянутый запрос даст следующий результат.

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

Здесь в столбце mytable есть два типа возраста - 12 и 13. Теперь запрос группирует записи по возрасту и выдает сумму оценок для соответствующего возраста учащихся.

Имея пункт

Предложение HAVING позволяет указать условия, которые фильтруют результаты группы, которые появляются в окончательных результатах. Предложение WHERE помещает условия в выбранные столбцы, тогда как предложение HAVING ставит условия в группы, созданные предложением GROUP BY.

Синтаксис

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

Запрос

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

Результат

Вышеупомянутый запрос даст следующий результат.

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

Запрос группирует записи по возрасту и возвращает возраст, когда сумма результата условия (отметка)> 200.

Заказ по пункту

Предложение ORDER BY используется для сортировки данных в порядке возрастания или убывания на основе одного или нескольких столбцов. По умолчанию база данных Tajo сортирует результаты запросов в порядке возрастания.

Синтаксис

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

Запрос

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

Результат

Вышеупомянутый запрос даст следующий результат.

Запрос возвращает имена тех студентов в порядке убывания, чьи оценки выше 60.

Создать оператор индекса

Оператор CREATE INDEX используется для создания индексов в таблицах. Индекс используется для быстрого поиска данных. Текущая версия поддерживает индекс только для простых текстовых форматов, хранящихся в HDFS.

Синтаксис

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

Запрос

create index student_index on mytable(id);

Результат

Вышеупомянутый запрос даст следующий результат.

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

Чтобы просмотреть назначенный индекс для столбца, введите следующий запрос.

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 )

Здесь метод TWO_LEVEL_BIN_TREE используется по умолчанию в Tajo.

Оператор Drop Table

Оператор Drop Table используется для удаления таблицы из базы данных.

Синтаксис

drop table table name;

Запрос

sampledb> drop table mytable;

Чтобы проверить, была ли таблица удалена из таблицы, введите следующий запрос.

sampledb> \d mytable;

Результат

Вышеупомянутый запрос даст следующий результат.

ERROR: relation 'mytable' does not exist

Вы также можете проверить запрос, используя команду «\ d», чтобы вывести список доступных таблиц Tajo.

В этой главе подробно описываются агрегатные и оконные функции.

Функции агрегирования

Агрегатные функции производят единый результат из набора входных значений. В следующей таблице подробно описан список агрегатных функций.

S.No. Описание функции
1 СРЕДНЕЕ (эксп.)

Усредняет столбец всех записей в источнике данных.

2 КОРР (выражение1; выражение2)

Возвращает коэффициент корреляции между набором пар чисел.

3 COUNT ()

Возвращает количество строк.

4 МАКС (выражение)

Возвращает наибольшее значение выбранного столбца.

5 MIN (выражение)

Возвращает наименьшее значение выбранного столбца.

6 СУММ (выражение)

Возвращает сумму данного столбца.

7 LAST_VALUE (выражение)

Возвращает последнее значение данного столбца.

Функция окна

Оконные функции выполняются для набора строк и возвращают одно значение для каждой строки из запроса. Термин «окно» имеет значение набора строк для функции.

Функция Window в запросе определяет окно с помощью предложения OVER ().

В OVER() статья имеет следующие возможности -

  • Определяет оконные перегородки для формирования групп строк. (Пункт PARTITION BY)
  • Упорядочивает строки внутри раздела. (Предложение ORDER BY)

В следующей таблице подробно описаны функции окна.

Функция Тип возврата Описание
ранг() int Возвращает ранг текущей строки с пробелами.
row_num () int Возвращает текущую строку в своем разделе, начиная с 1.
lead (значение [, целое смещение [, по умолчанию любое]]) То же, что и тип ввода Возвращает значение, вычисленное в строке, которая смещена на строки после текущей строки в разделе. Если такой строки нет, будет возвращено значение по умолчанию.
lag (значение [, целое смещение [, по умолчанию любое]]) То же, что и тип ввода Возвращает значение, вычисленное в строке, которая является смещенной строкой перед текущей строкой в ​​разделе.
first_value (значение) То же, что и тип ввода Возвращает первое значение входных строк.
last_value (значение) То же, что и тип ввода Возвращает последнее значение входных строк.

В этой главе рассказывается о следующих важных запросах.

  • Predicates
  • Explain
  • Join

Давайте продолжим и выполним запросы.

Предикаты

Предикат - это выражение, которое используется для оценки истинных / ложных значений и НЕИЗВЕСТНО. Предикаты используются в условии поиска предложений WHERE и HAVING и других конструкций, где требуется логическое значение.

Предикат IN

Определяет, соответствует ли значение проверяемого выражения любому значению в подзапросе или списке. Подзапрос - это обычный оператор SELECT, который имеет набор результатов из одного столбца и одной или нескольких строк. Этот столбец или все выражения в списке должны иметь тот же тип данных, что и проверяемое выражение.

Syntax

IN::= 
<expression to test> [NOT] IN (<subquery>) 
| (<expression1>,...)

Query

select id,name,address from mytable where id in(2,3,4);

Result

Вышеупомянутый запрос даст следующий результат.

id,  name,   address 
------------------------------- 
2,  Amit,  12 old street 
3,  Bob,   10 cross street 
4,  David, 15 express avenue

Запрос возвращает записи из mytable для студентов id 2,3 и 4.

Query

select id,name,address from mytable where id not in(2,3,4);

Result

Вышеупомянутый запрос даст следующий результат.

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

Вышеупомянутый запрос возвращает записи из mytable где студентов нет в 2,3 и 4.

Как предикат

Предикат LIKE сравнивает строку, указанную в первом выражении, для вычисления строкового значения, на которое ссылаются как на значение для проверки, с шаблоном, который определен во втором выражении для вычисления строкового значения.

Шаблон может содержать любую комбинацию подстановочных знаков, например -

  • Символ подчеркивания (_), который можно использовать вместо любого отдельного символа в проверяемом значении.

  • Знак процента (%), который заменяет любую строку из нуля или более символов в проверяемом значении.

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

Вышеупомянутый запрос даст следующий результат.

id,  name,  address,     age,  mark 
------------------------------- 
1,  Adam,  23 new street,  12,  90 
2,  Amit,  12 old street,  13,  95

Запрос возвращает записи из моей таблицы тех студентов, имена которых начинаются с буквы «А».

Query

select * from mytable where name like ‘_a%';

Result

Вышеупомянутый запрос даст следующий результат.

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

Запрос возвращает записи из mytable тех студентов, чьи имена начинаются с буквы «а» в качестве второго символа.

Использование значения NULL в условиях поиска

Давайте теперь поймем, как использовать значение NULL в условиях поиска.

Syntax

Predicate  
IS [NOT] NULL

Query

select name from mytable where name is not null;

Result

Вышеупомянутый запрос даст следующий результат.

name 
------------------------------- 
Adam 
Amit 
Bob 
David 
Esha 
Ganga 
Jack 
Leena 
Mary 
Peter  
(10 rows, 0.076 sec, 163 B selected)

Здесь результат истинный, поэтому он возвращает все имена из таблицы.

Query

Давайте теперь проверим запрос с условием NULL.

default> select name from mytable where name is null;

Result

Вышеупомянутый запрос даст следующий результат.

name 
------------------------------- 
(0 rows, 0.068 sec, 0 B selected)

Объясните

Explainиспользуется для получения плана выполнения запроса. Он показывает логический и глобальный план выполнения оператора.

Запрос логического плана

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

Вышеупомянутый запрос даст следующий результат.

Результат запроса показывает формат логического плана для данной таблицы. Логический план возвращает следующие три результата -

  • Список целей
  • Схема
  • В схеме

Запрос глобального плана

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

Вышеупомянутый запрос даст следующий результат.

Здесь Глобальный план показывает идентификатор блока выполнения, порядок выполнения и его информацию.

Присоединяется

Соединения SQL используются для объединения строк из двух или более таблиц. Ниже приведены различные типы соединений SQL.

  • Внутреннее соединение
  • {LEFT | ВПРАВО | ПОЛНОЕ} ВНЕШНЕЕ СОЕДИНЕНИЕ
  • Перекрестное соединение
  • Самостоятельное присоединение
  • Естественное соединение

Рассмотрим следующие две таблицы для выполнения операций объединения.

Таблица1 - Заказчики

Я бы имя Адрес Возраст
1 Клиент 1 23 Old Street 21 год
2 Клиент 2 12 Нью-Стрит 23
3 Клиент 3 10 Express Avenue 22
4 Клиент 4 15 Express Avenue 22
5 Клиент 5 20 Garden Street 33
6 Клиент 6 21 Северная улица 25

Таблица2 - customer_order

Я бы Номер заказа Emp Id
1 1 101
2 2 102
3 3 103
4 4 104
5 5 105

Давайте теперь продолжим и выполним операции объединения SQL для двух вышеуказанных таблиц.

Внутреннее соединение

Внутреннее соединение выбирает все строки из обеих таблиц, если есть совпадения между столбцами в обеих таблицах.

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

Вышеупомянутый запрос даст следующий результат.

age,  empid 
------------------------------- 
21,  101 
23,  102 
22,  103 
22,  104 
33,  105

Запрос соответствует пяти строкам из обеих таблиц. Следовательно, он возвращает возраст совпавших строк из первой таблицы.

Левое внешнее соединение

Левое внешнее соединение сохраняет все строки «левой» таблицы, независимо от того, есть ли строка в «правой» таблице или нет.

Query

select c.name,c1.empid from customers c left outer join customer_order c1 on c.id = c1.id;

Result

Вышеупомянутый запрос даст следующий результат.

name,       empid 
------------------------------- 
customer1,  101 
customer2,  102 
customer3,  103 
customer4,  104 
customer5,  105 
customer6,

Здесь левое внешнее соединение возвращает строки столбцов имен из таблицы клиентов (слева) и очищает строки, соответствующие столбцам из таблицы customer_order (справа).

Правое внешнее соединение

Правое внешнее соединение сохраняет все строки «правой» таблицы, независимо от того, есть ли строка, совпадающая с «левой» таблицей.

Query

select c.name,c1.empid from customers c right outer join customer_order c1 on c.id = c1.id;

Result

Вышеупомянутый запрос даст следующий результат.

name,      empid 
------------------------------- 
customer1,  101 
customer2,  102 
customer3,  103 
customer4,  104 
customer5,  105

Здесь правое внешнее объединение возвращает строки empid из таблицы customer_order (справа) и строки столбца имен из таблицы клиентов.

Полное внешнее соединение

Полное внешнее объединение сохраняет все строки как из левой, так и из правой таблицы.

Query

select * from customers c full outer join customer_order c1 on c.id = c1.id;

Result

Вышеупомянутый запрос даст следующий результат.

Запрос возвращает все совпадающие и несовпадающие строки как из таблицы customers, так и из таблицы customer_order.

Крестовое соединение

Это возвращает декартово произведение наборов записей из двух или более объединенных таблиц.

Syntax

SELECT *  FROM table1  CROSS JOIN table2;

Query

select orderid,name,address from customers,customer_order;

Result

Вышеупомянутый запрос даст следующий результат.

Вышеупомянутый запрос возвращает декартово произведение таблицы.

Естественное соединение

Естественное соединение не использует никаких операторов сравнения. Он не объединяет, как декартово произведение. Мы можем выполнить естественное соединение, только если между двумя отношениями существует хотя бы один общий атрибут.

Syntax

SELECT * FROM table1 NATURAL JOIN table2;

Query

select * from customers natural join customer_order;

Result

Вышеупомянутый запрос даст следующий результат.

Здесь есть один общий идентификатор столбца, который существует между двумя таблицами. Используя этот общий столбец,Natural Join присоединяется к обеим таблицам.

Самостоятельное присоединение

SQL SELF JOIN используется для присоединения таблицы к самой себе, как если бы таблица была двумя таблицами, временно переименовывая по крайней мере одну таблицу в операторе 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

Вышеупомянутый запрос даст следующий результат.

id,   name 
------------------------------- 
1,   customer1 
2,   customer2 
3,   customer3 
4,   customer4 
5,   customer5 
6,   customer6

Запрос присоединяет к себе таблицу клиентов.

Tajo поддерживает различные форматы хранения. Чтобы зарегистрировать конфигурацию плагина хранилища, вы должны добавить изменения в конфигурационный файл storage-site.json.

storage-site.json

Структура определяется следующим образом -

{ 
   "storages": { 
      “storage plugin name“: { 
         "handler": "${class name}”, "default-format": “plugin name" 
      } 
   } 
}

Каждый экземпляр хранилища идентифицируется URI.

Обработчик хранилища PostgreSQL

Tajo поддерживает обработчик хранилища PostgreSQL. Он позволяет запросам пользователей обращаться к объектам базы данных в PostgreSQL. Это обработчик хранилища по умолчанию в Tajo, поэтому вы можете легко его настроить.

конфигурация

{ 
   "spaces": {  
      "postgre": {  
         "uri": "jdbc:postgresql://hostname:port/database1"  
         "configs": {  
            "mapped_database": “sampledb”  
            "connection_properties": { 
               "user":“tajo", "password": "pwd" 
            } 
         } 
      } 
   } 
}

Вот, “database1” относится к postgreSQL база данных, которая сопоставлена ​​с базой данных “sampledb” в Тахо.

Apache Tajo поддерживает интеграцию HBase. Это позволяет нам получить доступ к таблицам HBase в Tajo. HBase - это распределенная база данных, ориентированная на столбцы, построенная на основе файловой системы Hadoop. Это часть экосистемы Hadoop, которая обеспечивает произвольный доступ для чтения / записи в реальном времени к данным в файловой системе Hadoop. Следующие шаги необходимы для настройки интеграции HBase.

Установить переменную среды

Добавьте следующие изменения в файл «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

После того, как вы указали путь HBase, Tajo установит для файла библиотеки HBase путь к классам.

Создать внешнюю таблицу

Создайте внешнюю таблицу, используя следующий синтаксис -

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>/'] ;

Для доступа к таблицам HBase необходимо настроить расположение табличного пространства.

Вот,

  • Table- Установить имя исходной таблицы hbase. Если вы хотите создать внешнюю таблицу, она должна существовать в HBase.

  • Columns- Ключ относится к ключу строки HBase. Количество столбцов записи должно быть равно количеству столбцов таблицы Tajo.

  • hbase.zookeeper.quorum - Установить адрес кворума zookeeper.

  • hbase.zookeeper.property.clientPort - Установите порт клиента 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>/';

Здесь поле Путь к местоположению устанавливает идентификатор порта клиента zookeeper. Если вы не установите порт, Tajo будет ссылаться на свойство файла hbase-site.xml.

Создать таблицу в HBase

Вы можете запустить интерактивную оболочку HBase с помощью команды «hbase shell», как показано в следующем запросе.

Query

/bin/hbase shell

Result

Вышеупомянутый запрос даст следующий результат.

hbase(main):001:0>

Шаги по запросу HBase

Чтобы запросить HBase, вы должны выполнить следующие шаги -

Step 1 - Подключите следующие команды к оболочке HBase, чтобы создать «учебную» таблицу.

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 - Теперь введите следующую команду в оболочке hbase, чтобы загрузить данные в таблицу.

main):001:0> cat ../hbase/hbase-students.txt | bin/hbase shell

Step 3 - Теперь вернитесь в оболочку Tajo и выполните следующую команду, чтобы просмотреть метаданные таблицы -

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 - Чтобы получить результаты из таблицы, используйте следующий запрос -

Query

default> select * from students

Result

Вышеупомянутый запрос даст следующий результат -

rowkey,  id,  name 
------------------------------- 
row-01,  001,  Adam 
row-02,  002,  Amit 
row-03   003,  Bob

Tajo поддерживает HiveCatalogStore для интеграции с Apache Hive. Эта интеграция позволяет Tajo получать доступ к таблицам в Apache Hive.

Установить переменную среды

Добавьте следующие изменения в файл «conf / tajo-env.sh».

$ vi conf/tajo-env.sh  
export HIVE_HOME = /path/to/hive

После того, как вы включили путь Hive, Tajo установит файл библиотеки Hive в путь к классам.

Конфигурация каталога

Добавьте следующие изменения в файл «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>

После настройки HiveCatalogStore вы можете получить доступ к таблице Hive в Tajo.

Swift - это распределенное и согласованное хранилище объектов / BLOB-объектов. Swift предлагает программное обеспечение для облачного хранилища, чтобы вы могли хранить и извлекать большой объем данных с помощью простого API. Tajo поддерживает интеграцию со Swift.

Ниже приведены предварительные условия для быстрой интеграции.

  • Swift
  • Hadoop

Core-site.xml

Добавьте следующие изменения в файл 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>

Это будет использоваться Hadoop для доступа к объектам Swift. После внесения всех изменений перейдите в каталог Tajo, чтобы установить переменную среды Swift.

conf / tajo-env.h

Откройте файл конфигурации Tajo и добавьте переменную среды следующим образом:

$ vi conf/tajo-env.h export TAJO_CLASSPATH = $HADOOP_HOME/share/hadoop/tools/lib/hadoop-openstack-x.x.x.jar

Теперь Tajo сможет запрашивать данные с помощью Swift.

Создать таблицу

Давайте создадим внешнюю таблицу для доступа к объектам Swift в Tajo следующим образом:

default> create external table swift(num1 int, num2 text, num3 float) 
   using text with ('text.delimiter' = '|') location 'swift://bucket-name/table1';

После создания таблицы вы можете запускать SQL-запросы.

Apache Tajo предоставляет интерфейс JDBC для подключения и выполнения запросов. Мы можем использовать тот же интерфейс JDBC для подключения Tajo из нашего Java-приложения. Давайте теперь поймем, как подключить Tajo и выполнить команды в нашем примере Java-приложения с использованием интерфейса JDBC из этого раздела.

Загрузить драйвер JDBC

Загрузите драйвер JDBC, перейдя по следующей ссылке - http://apache.org/dyn/closer.cgi/tajo/tajo-0.11.3/tajo-jdbc-0.11.3.jar.

Теперь файл «tajo-jdbc-0.11.3.jar» загружен на ваш компьютер.

Установить путь к классу

Чтобы использовать драйвер JDBC в вашей программе, установите путь к классу следующим образом:

CLASSPATH = path/to/tajo-jdbc-0.11.3.jar:$CLASSPATH

Подключиться к Тахо

Apache Tajo предоставляет драйвер JDBC в виде одного файла jar, и он доступен @ /path/to/tajo/share/jdbc-dist/tajo-jdbc-0.11.3.jar.

Строка подключения для подключения Apache Tajo имеет следующий формат -

jdbc:tajo://host/
jdbc:tajo://host/database
jdbc:tajo://host:port/  
jdbc:tajo://host:port/database

Вот,

  • host - Имя хоста TajoMaster.

  • port- Номер порта, который прослушивает сервер. Номер порта по умолчанию - 26002.

  • database- Имя базы данных. Имя базы данных по умолчанию - default.

Приложение Java

Давайте теперь разберемся с Java-приложением.

Кодирование

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(); 
      } 
   } 
}

Приложение можно скомпилировать и запустить с помощью следующих команд.

Компиляция

javac -cp /path/to/tajo-jdbc-0.11.3.jar:. TajoJdbcSample.java

Исполнение

java -cp /path/to/tajo-jdbc-0.11.3.jar:. TajoJdbcSample

Результат

Приведенные выше команды сгенерируют следующий результат -

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 поддерживает настраиваемые / определяемые пользователем функции (UDF). Пользовательские функции могут быть созданы на Python.

Пользовательские функции - это простые функции Python с декоратором. “@output_type(<tajo sql datatype>)” следующим образом -

@ouput_type(“integer”) 
def sum_py(a, b): 
   return a + b;

Скрипты python с UDF можно зарегистрировать, добавив приведенную ниже конфигурацию в “tajosite.xml”.

<property> 
   <name>tajo.function.python.code-dir</name> 
   <value>file:///path/to/script1.py,file:///path/to/script2.py</value> 
</property>

После регистрации сценариев перезапустите кластер, и UDF будут доступны прямо в запросе SQL следующим образом:

select sum_py(10, 10) as pyfn;

Apache Tajo также поддерживает определенные пользователем агрегатные функции, но не поддерживает определенные пользователем оконные функции.