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

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

Например, Facebook - одна из ведущих и крупнейших компаний по хранению данных в мире. Данные хранилища Facebook хранятся в Hadoop для крупномасштабных вычислений. Позже, когда объем данных хранилища вырос до петабайт, они решили разработать новую систему с низкой задержкой. В 2012 году участники команды Facebook разработали“Presto” для интерактивной аналитики запросов, которая будет работать быстро даже с петабайтами данных.

Что такое Apache Presto?

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

Один запрос Presto может обрабатывать данные из нескольких источников, таких как HDFS, MySQL, Cassandra, Hive и многих других источников данных. Presto построен на Java и легко интегрируется с другими компонентами инфраструктуры данных. Presto - мощный инструмент, и ведущие компании, такие как Airbnb, DropBox, Groupon, Netflix, принимают его.

Presto - Особенности

Presto содержит следующие функции -

  • Простая и расширяемая архитектура.
  • Подключаемые соединители - Presto поддерживает съемные соединители для предоставления метаданных и данных для запросов.
  • Конвейерное выполнение - позволяет избежать ненужных задержек ввода-вывода.
  • Пользовательские функции - аналитики могут создавать пользовательские пользовательские функции для упрощения миграции.
  • Векторизованная столбчатая обработка.

Presto - Преимущества

Вот список преимуществ, которые предлагает Apache Presto:

  • Специализированные операции SQL
  • Простота установки и отладки
  • Простая абстракция хранилища
  • Быстро масштабирует петабайты данных с малой задержкой

Presto - Приложения

Presto поддерживает большинство современных промышленных приложений. Давайте посмотрим на некоторые из наиболее заметных приложений.

  • Facebook- Facebook создал Presto для нужд аналитики данных. Presto легко масштабирует большие скорости передачи данных.

  • Teradata- Teradata предоставляет комплексные решения в области аналитики больших данных и хранилищ данных. Вклад Teradata в Presto позволяет большему количеству компаний удовлетворять все аналитические потребности.

  • Airbnb- Presto является неотъемлемой частью инфраструктуры данных Airbnb. Что ж, сотни сотрудников каждый день обрабатывают запросы с помощью этой технологии.

Почему Престо?

Presto поддерживает стандартный ANSI SQL, который очень упростил работу аналитиков и разработчиков. Хотя он построен на Java, он позволяет избежать типичных проблем кода Java, связанных с распределением памяти и сборкой мусора. Presto имеет архитектуру коннекторов, совместимую с Hadoop. Это позволяет легко подключать файловые системы.

Presto работает в нескольких дистрибутивах Hadoop. Кроме того, Presto может обращаться с платформы Hadoop для запроса Cassandra, реляционных баз данных или других хранилищ данных. Эта кроссплатформенная аналитическая возможность позволяет пользователям Presto извлекать максимальную выгоду для бизнеса из гигабайт или петабайт данных.

Архитектура Presto почти аналогична классической архитектуре СУБД MPP (массовая параллельная обработка). На следующей схеме показана архитектура Presto.

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

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

Client

Клиент (Presto CLI) отправляет операторы SQL координатору для получения результата.

2.

Coordinator

Координатор - это главный демон. Координатор сначала анализирует запросы SQL, затем анализирует и планирует выполнение запроса. Планировщик выполняет конвейерное выполнение, назначает работу ближайшему узлу и отслеживает прогресс.

3.

Connector

Плагины хранилища называются коннекторами. Hive, HBase, MySQL, Cassandra и многие другие действуют как соединители; в противном случае вы также можете реализовать собственный. Коннектор предоставляет метаданные и данные для запросов. Координатор использует коннектор для получения метаданных для построения плана запроса.

4.

Worker

Координатор назначает задачу рабочим узлам. Рабочие получают актуальные данные от коннектора. Наконец, рабочий узел передает результат клиенту.

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

Presto - это распределенная система, работающая на кластере узлов. Механизм распределенных запросов Presto оптимизирован для интерактивного анализа и поддерживает стандартный ANSI SQL, включая сложные запросы, агрегаты, объединения и оконные функции. Архитектура Presto проста и расширяема. Клиент Presto (CLI) отправляет операторы SQL главному координатору демона.

Планировщик подключается через конвейер выполнения. Планировщик назначает работу узлам, наиболее близким к данным, и отслеживает прогресс. Координатор назначает задачу нескольким рабочим узлам, и, наконец, рабочий узел возвращает результат клиенту. Клиент извлекает данные из процесса вывода. Расширяемость - это ключевой дизайн. Сменные соединители, такие как Hive, HBase, MySQL и т. Д., Предоставляют метаданные и данные для запросов. Presto был разработан с использованием «простой абстракции хранилища», которая упрощает предоставление возможности запроса SQL к этим различным типам источников данных.

Модель исполнения

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

В этой главе объясняется, как установить Presto на ваш компьютер. Пройдемся по основным требованиям Presto,

  • Linux или Mac OS
  • Java версии 8

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

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

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

$ java -version

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

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

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Последняя версия - JDK 8u 92, а файл - «jdk-8u92-linux-x64.tar.gz». Загрузите файл на свой компьютер.

После этого извлеките файлы и перейдите в определенный каталог.

Затем установите альтернативы Java. Наконец, на вашем компьютере будет установлена ​​Java.

Установка Apache Presto

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

https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.149/

Теперь последняя версия «presto-server-0.149.tar.gz» будет загружена на ваш компьютер.

Извлечь файлы tar

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

$ tar  -zxf  presto-server-0.149.tar.gz 
$ cd presto-server-0.149

Настройки конфигурации

Создать каталог «данных»

Создайте каталог данных вне каталога установки, который будет использоваться для хранения журналов, метаданных и т. Д., Чтобы его можно было легко сохранить при обновлении Presto. Он определяется с использованием следующего кода -

$ cd  
$ mkdir data

Чтобы просмотреть путь, по которому он расположен, используйте команду «pwd». Это местоположение будет назначено в следующем файле node.properties.

Создайте каталог «etc»

Создайте каталог etc внутри каталога установки Presto, используя следующий код -

$ cd presto-server-0.149 
$ mkdir etc

В этом каталоге будут храниться файлы конфигурации. Давайте создадим каждый файл один за другим.

Свойства узла

Файл свойств узла Presto содержит конфигурацию среды, специфичную для каждого узла. Он создается внутри каталога etc (etc / node.properties) с использованием следующего кода -

$ cd etc 
$ vi node.properties  

node.environment = production 
node.id = ffffffff-ffff-ffff-ffff-ffffffffffff 
node.data-dir = /Users/../workspace/Presto

После внесения всех изменений сохраните файл и выйдите из терминала. Вотnode.data - это путь расположения созданного выше каталога данных. node.id представляет собой уникальный идентификатор для каждого узла.

Конфигурация JVM

Создайте файл «jvm.config» внутри каталога etc (etc / jvm.config). Этот файл содержит список параметров командной строки, используемых для запуска виртуальной машины Java.

$ cd etc 
$ vi jvm.config  

-server 
-Xmx16G 
-XX:+UseG1GC 
-XX:G1HeapRegionSize = 32M 
-XX:+UseGCOverheadLimit 
-XX:+ExplicitGCInvokesConcurrent 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:OnOutOfMemoryError = kill -9 %p

После внесения всех изменений сохраните файл и выйдите из терминала.

Свойства конфигурации

Создайте файл «config.properties» в каталоге etc (etc / config.properties). Этот файл содержит конфигурацию сервера Presto. Если вы настраиваете одну машину для тестирования, сервер Presto может функционировать только как процесс координации, как определено с помощью следующего кода:

$ cd etc 
$ vi config.properties  

coordinator = true 
node-scheduler.include-coordinator = true 
http-server.http.port = 8080 
query.max-memory = 5GB 
query.max-memory-per-node = 1GB 
discovery-server.enabled = true 
discovery.uri = http://localhost:8080

Вот,

  • coordinator - главный узел.

  • node-scheduler.include-coordinator - Позволяет планировать работу координатора.

  • http-server.http.port - Задает порт для HTTP-сервера.

  • query.max-memory=5GB - Максимальный объем распределенной памяти.

  • query.max-memory-per-node=1GB - Максимальный объем памяти на узел.

  • discovery-server.enabled - Presto использует службу Discovery для поиска всех узлов в кластере.

  • discovery.uri - URI к серверу Discovery.

Если вы настраиваете сервер Presto на нескольких машинах, Presto будет работать как координационный, так и рабочий процесс. Используйте этот параметр конфигурации для тестирования сервера Presto на нескольких машинах.

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

$ cd etc 
$ vi config.properties  

coordinator = true 
node-scheduler.include-coordinator = false 
http-server.http.port = 8080 
query.max-memory = 50GB 
query.max-memory-per-node = 1GB 
discovery-server.enabled = true 
discovery.uri = http://localhost:8080

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

$ cd etc 
$ vi config.properties  

coordinator = false 
http-server.http.port = 8080 
query.max-memory = 50GB 
query.max-memory-per-node = 1GB 
discovery.uri = http://localhost:8080

Свойства журнала

Создайте файл «log.properties» в каталоге etc (etc / log.properties). Этот файл содержит минимальный уровень журнала для именованных иерархий регистраторов. Он определяется с использованием следующего кода -

$ cd etc 
$ vi log.properties  
com.facebook.presto = INFO

Сохраните файл и выйдите из терминала. Здесь используются четыре уровня журнала, такие как DEBUG, INFO, WARN и ERROR. Уровень журнала по умолчанию - ИНФОРМАЦИЯ.

Свойства каталога

Создайте каталог «catalog» внутри каталога etc (etc / catalog). Это будет использоваться для монтажа данных. Например, создатьetc/catalog/jmx.properties со следующим содержанием для установки jmx connector как каталог jmx -

$ cd etc 
$ mkdir catalog $ cd catalog 
$ vi jmx.properties  
connector.name = jmx

Запустить Presto

Presto можно запустить с помощью следующей команды:

$ bin/launcher start

Тогда вы увидите ответ, похожий на этот:

Started as 840

Запустите Presto

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

$ bin/launcher run

После успешного запуска сервера Presto вы можете найти файлы журнала в каталоге «var / log».

  • launcher.log - Этот журнал создается программой запуска и подключается к потокам stdout и stderr сервера.

  • server.log - Это основной файл журнала, используемый Presto.

  • http-request.log - HTTP-запрос, полученный сервером.

На данный момент вы успешно установили параметры конфигурации Presto на свой компьютер. Продолжим шаги по установке Presto CLI.

Установите Presto CLI

Presto CLI предоставляет интерактивную оболочку на основе терминала для выполнения запросов.

Загрузите Presto CLI, перейдя по следующей ссылке,

https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.149/

Теперь на вашем компьютере будет установлен «presto-cli-0.149-executable.jar».

Запустите CLI

После загрузки presto-cli скопируйте его в то место, откуда вы хотите его запустить. Этим местоположением может быть любой узел, имеющий сетевой доступ к координатору. Сначала измените имя файла Jar на Presto. Затем сделайте его исполняемым с помощьюchmod + x команда, используя следующий код -

$ mv presto-cli-0.149-executable.jar presto  
$ chmod +x presto

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

./presto --server localhost:8080 --catalog jmx --schema default  
Here jmx(Java Management Extension) refers to catalog and default referes to schema.

Вы увидите следующий ответ,

presto:default>

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

Остановить Престо

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

$ bin/launcher stop

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

Presto Verifier

Presto Verifier можно использовать для тестирования Presto в другой базе данных (например, MySQL) или для тестирования двух кластеров Presto друг против друга.

Создать базу данных в MySQL

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

create database test

Теперь вы создали на сервере «тестовую» базу данных. Создайте таблицу и загрузите ее с помощью следующего запроса.

CREATE TABLE verifier_queries( 
   id INT NOT NULL AUTO_INCREMENT, 
   suite VARCHAR(256) NOT NULL, 
   name VARCHAR(256), 
   test_catalog VARCHAR(256) NOT NULL, 
   test_schema VARCHAR(256) NOT NULL, 
   test_prequeries TEXT, 
   test_query TEXT NOT NULL, 
   test_postqueries TEXT, 
   test_username VARCHAR(256) NOT NULL default 'verifier-test', 
   test_password VARCHAR(256), 
   control_catalog VARCHAR(256) NOT NULL, 
   control_schema VARCHAR(256) NOT NULL, 
   control_prequeries TEXT, 
   control_query TEXT NOT NULL, 
   control_postqueries TEXT, 
   control_username VARCHAR(256) NOT NULL default 'verifier-test', 
   control_password VARCHAR(256), 
   session_properties_json TEXT,            
   PRIMARY KEY (id) 
);

Добавить настройки конфигурации

Создайте файл свойств для настройки верификатора -

$ vi config.properties  

suite = mysuite 
query-database = jdbc:mysql://localhost:3306/tutorials?user=root&password=pwd 
control.gateway = jdbc:presto://localhost:8080 
test.gateway = jdbc:presto://localhost:8080 
thread-count = 1

Здесь, в query-database В поле введите следующие данные - имя базы данных mysql, имя пользователя и пароль.

Скачать файл JAR

Загрузите файл jar Presto-verifier, перейдя по следующей ссылке,

https://repo1.maven.org/maven2/com/facebook/presto/presto-verifier/0.149/

Теперь версия “presto-verifier-0.149-executable.jar” загружается на ваш компьютер.

Запустить JAR

Запустите файл JAR, используя следующую команду,

$ mv presto-verifier-0.149-executable.jar verifier  
$ chmod+x verifier

Запустить верификатор

Запустите верификатор, используя следующую команду,

$ ./verifier config.properties

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

Создадим простую таблицу в “test” базу данных, используя следующий запрос.

create table product(id int not null, name varchar(50))

Вставить таблицу

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

insert into product values(1,’Phone') 
insert into product values(2,’Television’)

Запустить запрос верификатора

Выполните следующий пример запроса в терминале верификатора (./verifier config.propeties), чтобы проверить результат верификатора.

Образец запроса

insert into verifier_queries (suite, test_catalog, test_schema, test_query, 
control_catalog, control_schema, control_query) values 
('mysuite', 'mysql', 'default', 'select * from mysql.test.product', 
'mysql', 'default', 'select * from mysql.test.product');

Вот, select * from mysql.test.product запрос относится к каталогу mysql, test имя базы данных и productэто имя таблицы. Таким образом, вы можете получить доступ к соединителю mysql с помощью сервера Presto.

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

В этой главе мы обсудим инструменты администрирования, используемые в Presto. Начнем с веб-интерфейса Presto.

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

Presto предоставляет веб-интерфейс для мониторинга и управления запросами. Доступ к нему можно получить по номеру порта, указанному в свойствах конфигурации координатора.

Запустите сервер Presto и Presto CLI. Затем вы можете получить доступ к веб-интерфейсу по следующему URL-адресу -http://localhost:8080/

Результат будет аналогичен приведенному выше экрану.

Здесь на главной странице есть список запросов вместе с такой информацией, как уникальный идентификатор запроса, текст запроса, состояние запроса, процент выполнения, имя пользователя и источник, из которого был создан этот запрос. Сначала выполняются последние запросы, затем внизу отображаются завершенные или незавершенные запросы.

Настройка производительности на Presto

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

Свойства конфигурации

  • task. info -refresh-max-wait - Снижает нагрузку на координатора.

  • task.max-worker-threads - Разделяет процесс и назначает каждому рабочему узлу.

  • distributed-joins-enabled - Распределенные соединения на основе хэша.

  • node-scheduler.network-topology - Устанавливает топологию сети в планировщик.

Настройки JVM

Измените настройки JVM по умолчанию на следующие настройки. Это будет полезно для диагностики проблем со сборкой мусора.

-XX:+PrintGCApplicationConcurrentTime 
-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCCause 
-XX:+PrintGCDateStamps 
-XX:+PrintGCTimeStamps 
-XX:+PrintGCDetails 
-XX:+PrintReferenceGC 
-XX:+PrintClassHistogramAfterFullGC 
-XX:+PrintClassHistogramBeforeFullGC 
-XX:PrintFLSStatistics = 2 
-XX:+PrintAdaptiveSizePolicy 
-XX:+PrintSafepointStatistics 
-XX:PrintSafepointStatisticsCount = 1

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

Основные типы данных

В следующей таблице описаны основные типы данных Presto.

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

VARCHAR

Символьные данные переменной длины

2.

BIGINT

64-битное целое число со знаком

3.

DOUBLE

64-битное значение двойной точности с плавающей запятой

4.

DECIMAL

Десятичное число фиксированной точности. Например, DECIMAL (10,3) - 10 - это точность, т.е. общее количество цифр, а 3 - значение шкалы, представленное в виде дробной точки. Масштаб не является обязательным, значение по умолчанию - 0

5.

BOOLEAN

Логические значения true и false

6.

VARBINARY

Двоичные данные переменной длины

7.

JSON

Данные JSON

8.

DATE

Тип данных даты, представленный как год-месяц-день

9.

TIME, TIMESTAMP, TIMESTAMP with TIME ZONE

ВРЕМЯ - Время дня (час-мин-секунда-миллисекунда)

TIMESTAMP - Дата и время дня

TIMESTAMP with TIME ZONE - Дата и время дня с часовым поясом от значения

10.

INTERVAL

Растянуть или расширить типы данных даты и времени

11.

ARRAY

Массив заданного типа компонента. Например, ARRAY [5,7]

12.

MAP

Сопоставление заданных типов компонентов. Например, MAP (ARRAY ['один', 'два'], ARRAY [5,7])

13.

ROW

Структура строк, состоящая из именованных полей

Presto - Операторы

Операторы Presto перечислены в следующей таблице.

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

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

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

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

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

И, ИЛИ, НЕ

4. Оператор диапазона

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

5. Десятичный оператор

Двоичный арифметический десятичный оператор выполняет двоичную арифметическую операцию для десятичного типа Унарный десятичный оператор - - operator выполняет отрицание

6. Строковый оператор

В ‘||’ operator выполняет конкатенацию строк

7. Оператор даты и времени

Выполняет арифметические операции сложения и вычитания для типов данных даты и времени

8. Оператор массива

Оператор нижнего индекса [] - доступ к элементу массива

Оператор конкатенации || - объединить массив с массивом или элементом того же типа

9. Оператор карты

Оператор индекса карты [] - получить значение, соответствующее заданному ключу, из карты

На данный момент мы обсуждали выполнение некоторых простых базовых запросов в Presto. В этой главе будут обсуждаться важные функции SQL.

Математические функции

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

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

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

2. cbrt (x)

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

3. потолок (x)

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

4.

ceil(x)

Псевдоним для потолка (x)

5. градусы (х)

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

6. е (х)

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

7.

exp(x)

Возвращает значение экспоненты для числа Эйлера.

8. этаж (x)

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

9.

from_base(string,radix)

Возвращает значение строки, интерпретируемой как число с основанием системы счисления.

10.

ln(x)

Возвращает натуральный логарифм от. x

11. log2 (х)

Возвращает логарифм числа по основанию 2. x

12.

log10(x)

Возвращает десятичный логарифм числа. x

13.

log(x,y)

Возвращает базу y логарифм x

14. мод (п, м)

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

15.

pi()

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

16. мощность (x, p)

Возвращает силу ценности ‘p’ к x значение

17.

pow(x,p)

Псевдоним власти (x, p)

18. радианы (х)

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

19.

rand()

Псевдоним для радианов ()

20. случайный ()

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

21.

rand(n)

Псевдоним для random ()

22. круглый (х)

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

23.

round(x,d)

x значение округлено для ‘d’ десятичные знаки

24.

sign(x)

Возвращает знаковую функцию x, т. Е.

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

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

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

Для двойных аргументов функция дополнительно возвращает -

NaN, если аргумент - NaN

1, если аргумент + Infinity

-1, если аргумент -Infinity

25. sqrt (х)

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

26. to_base (x, основание системы счисления)

Тип возврата - лучник. Результат возвращается как основание системы счисления дляx

27. усечь (х)

Усекает значение для x

28. width_bucket (х, граница1, граница2, п)

Возвращает номер ячейки x указанные границы bound1 и bound2 и n количество сегментов

29. width_bucket (x, ячейки)

Возвращает номер ячейки x в соответствии с ячейками, указанными ячейками массива

Тригонометрические функции

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

S.No Функции и описание
1. acos (x)

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

2.

asin(x)

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

3.

atan(x)

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

4. atan2 (у, х)

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

5.

cos(x)

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

6. cosh (x)

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

7. грех (х)

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

8.

tan(x)

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

9.

tanh(x)

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

Побитовые функции

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

S.No Функции и описание
1. bit_count (x, биты)

Подсчитайте количество бит

2. побитовое_и (х, у)

Выполните побитовую операцию И для двух битов, x и y

3. побитовое_или (х, у)

Побитовая операция ИЛИ между двумя битами x, y

4. bitwise_not (х)

Побитовая операция Not для бита x

5. bitwise_xor (х, у)

Операция XOR для битов x, y

Строковые функции

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

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

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

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

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

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

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

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

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

5. lpad (строка, размер, padstring)

Левый отступ для данной строки

6. ltrim (строка)

Удаляет начальный пробел из строки

7. replace (строка, поиск, замена)

Заменяет строковое значение

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

Отменяет операцию, выполненную для строки

9. rpad (строка, размер, строка)

Правый отступ для данной строки

10. rtrim (строка)

Удаляет завершающий пробел из строки

11. split (строка, разделитель)

Разбивает строку по разделителю и возвращает массив максимального размера.

12. split_part (строка, разделитель, индекс)

Разделяет строку по разделителю и возвращает индекс поля

13. strpos (строка, подстрока)

Возвращает начальную позицию подстроки в строке

14. substr (строка; начало)

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

15. substr (строка, начало, длина)

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

16. обрезать (строка)

Удаляет начальные и конечные пробелы из строки

Функции даты и времени

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

S.No Функции и описание
1. текущая дата

Возвращает текущую дату

2. Текущее время

Возвращает текущее время

3. current_timestamp

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

4. current_timezone ()

Возвращает текущий часовой пояс

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

Возвращает текущую дату, отметку времени с часовым поясом

6. местное время

Возвращает местное время

7. местная отметка времени

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

Функции регулярных выражений

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

S.No Функции и описание
1. regexp_extract_all (строка, шаблон)

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

2. regexp_extract_all (строка, шаблон, группа)

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

3. regexp_extract (строка, шаблон)

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

4. regexp_extract (строка, шаблон, группа)

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

5. regexp_like (строка, шаблон)

Возвращает строку, совпадающую с шаблоном. Если строка возвращается, значение будет true, иначе false

6. regexp_replace (строка, шаблон)

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

7. regexp_replace (строка, шаблон, замена)

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

8. regexp_split (строка, шаблон)

Разделяет регулярное выражение для данного шаблона

Функции JSON

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

S.No Functions & Description
1. json_array_contains(json, value)

Check the value exists in a json array. If the value exists it will return true, otherwise false

2. json_array_get(json_array, index)

Get the element for index in json array

3. json_array_length(json)

Returns the length in json array

4. json_format(json)

Returns the json structure format

5. json_parse(string)

Parses the string as a json

6. json_size(json, json_path)

Returns the size of the value

URL Functions

The following table lists out the URL functions.

S.No Functions & Description
1. url_extract_host(url)

Returns the URL’s host

2. url_extract_path(url)

Returns the URL’s path

3. url_extract_port(url)

Returns the URL’s port

4. url_extract_protocol(url)

Returns the URL’s protocol

5. url_extract_query(url)

Returns the URL’s query string

Aggregate Functions

The following table lists out the Aggregate functions.

S.No Functions & Description
1.

avg(x)

Returns average for the given value

2. min(x,n)

Returns the minimum value from two values

3. max(x,n)

Returns the maximum value from two values

4. sum(x)

Returns the sum of value

5. count(*)

Returns the number of input rows

6. count(x)

Returns the count of input values

7. checksum(x)

Returns the checksum for x

8. arbitrary(x)

Returns the arbitrary value for x

Color Functions

Following table lists out the Color functions.

S.No Functions & Description
1. bar(x, width)

Renders a single bar using rgb low_color and high_color

2. bar(x, width, low_color, high_color)

Renders a single bar for the specified width

3. color(string)

Returns the color value for the entered string

4. render(x, color)

Renders value x using the specific color using ANSI color codes

5. render(b)

Accepts boolean value b and renders a green true or a red false using ANSI color codes

6.

rgb(red, green, blue)

Returns a color value capturing the RGB value of three component color values supplied as int parameters ranging from 0 to 255

Array Functions

The following table lists out the Array functions.

S.No Functions & Description
1. array_max(x)

Finds the max element in an array

2. array_min(x)

Finds the min element in an array

3. array_sort(x)

Sorts the elements in an array

4. array_remove(x,element)

Removes the specific element from an array

5. concat(x,y)

Concatenates two arrays

6. contains(x,element)

Finds the given elements in an array. True will be returned if it is present, otherwise false

7. array_position(x,element)

Find the position of the given element in an array

8. array_intersect(x,y)

Performs an intersection between two arrays

9. element_at(array,index)

Returns the array element position

10. slice(x,start,length)

Slices the array elements with the specific length

Teradata Functions

The following table lists out Teradata functions.

S.No Functions & Description
1. index(string,substring)

Returns the index of the string with the given substring

2. substring(string,start)

Returns the substring of the given string. You can specify the start index here

3. substring(string,start,length)

Returns the substring of the given string for the specific start index and length of the string

The MySQL connector is used to query an external MySQL database.

Prerequisites

MySQL server installation.

Configuration Settings

Hopefully you have installed mysql server on your machine. To enable mysql properties on Presto server, you must create a file “mysql.properties” in “etc/catalog” directory. Issue the following command to create a mysql.properties file.

$ cd etc $ cd catalog 
$ vi mysql.properties   

connector.name = mysql 
connection-url = jdbc:mysql://localhost:3306 
connection-user = root 
connection-password = pwd

Save the file and quit the terminal. In the above file, you must enter your mysql password in connection-password field.

Create Database in MySQL Server

Open MySQL server and create a database using the following command.

create database tutorials

Now you have created “tutorials” database in the server. To enable database type, use the command “use tutorials” in the query window.

Create Table

Let’s create a simple table on “tutorials” database.

create table author(auth_id int not null, auth_name varchar(50),topic varchar(100))

Insert Table

After creating a table, insert three records using the following query.

insert into author values(1,'Doug Cutting','Hadoop') 
insert into author values(2,’James Gosling','java') 
insert into author values(3,'Dennis Ritchie’,'C')

Select Records

To retrieve all the records, type the following query.

Query

select * from author

Result

auth_id    auth_name      topic  
1        Doug Cutting     Hadoop 
2        James Gosling    java 
3        Dennis Ritchie     C

As of now, you have queried data using MySQL server. Let’s connect Mysql storage plugin to Presto server.

Connect Presto CLI

Type the following command to connect MySql plugin on Presto CLI.

./presto --server localhost:8080 --catalog mysql --schema tutorials

You will receive the following response.

presto:tutorials>

Here “tutorials” refers to schema in mysql server.

List Schemas

To list out all the schemas in mysql, type the following query in Presto server.

Query

presto:tutorials> show schemas from mysql;

Result

Schema 
-------------------- 
 information_schema 
 performance_schema 
 sys 
 tutorials

From this result, we can conclude the first three schemas as predefined and the last one as created by yourself.

List Tables from Schema

Following query lists out all the tables in tutorials schema.

Query

presto:tutorials> show tables from mysql.tutorials;

Result

Table 
-------- 
 author

We have created only one table in this schema. If you have created multiple tables, it will list out all the tables.

Describe Table

To describe the table fields, type the following query.

Query

presto:tutorials> describe mysql.tutorials.author;

Result

Column   |     Type     | Comment 
-----------+--------------+--------- 
 auth_id   | integer      | 
 auth_name | varchar(50)  | 
 topic     | varchar(100) |

Show Columns from Table

Query

presto:tutorials> show columns from mysql.tutorials.author;

Result

Column    |     Type     | Comment 
-----------+--------------+--------- 
 auth_id   | integer      | 
 auth_name | varchar(50)  | 
 topic     | varchar(100) |

Access Table Records

To fetch all the records from mysql table, issue the following query.

Query

presto:tutorials> select * from mysql.tutorials.author;

Result

auth_id  |   auth_name    | topic 
---------+----------------+-------- 
       1 | Doug Cutting   | Hadoop 
       2 | James Gosling  | java 
       3 | Dennis Ritchie | C

From this result, you can retrieve mysql server records in Presto.

Create Table Using as Command

Mysql connector doesn’t support create table query but you can create a table using as command.

Query

presto:tutorials> create table mysql.tutorials.sample as 
select * from mysql.tutorials.author;

Result

CREATE TABLE: 3 rows

You can’t insert rows directly because this connector has some limitations. It cannot support the following queries −

  • create
  • insert
  • update
  • delete
  • drop

To view the records in the newly created table, type the following query.

Query

presto:tutorials> select * from mysql.tutorials.sample;

Result

auth_id  |   auth_name    | topic 
---------+----------------+-------- 
       1 | Doug Cutting   | Hadoop 
       2 | James Gosling  | java 
       3 | Dennis Ritchie | C

Java Management Extensions (JMX) gives information about the Java Virtual Machine and software running inside JVM. The JMX connector is used to query JMX information in Presto server.

As we have already enabled “jmx.properties” file under “etc/catalog” directory. Now connect Prest CLI to enable JMX plugin.

Presto CLI

Query

$ ./presto --server localhost:8080 --catalog jmx --schema jmx

Result

You will receive the following response.

presto:jmx>

JMX Schema

To list out all the schemas in “jmx”, type the following query.

Query

presto:jmx> show schemas from jmx;

Result

Schema 
-------------------- 
 information_schema  
 current

Show Tables

To view the tables in the “current” schema, use the following command.

Query 1

presto:jmx> show tables from jmx.current;

Result

Table                   
------------------------------------------------------------------------------
 com.facebook.presto.execution.scheduler:name = nodescheduler
 com.facebook.presto.execution:name = queryexecution
 com.facebook.presto.execution:name = querymanager
 com.facebook.presto.execution:name = remotetaskfactory
 com.facebook.presto.execution:name = taskexecutor
 com.facebook.presto.execution:name = taskmanager
 com.facebook.presto.execution:type = queryqueue,name = global,expansion = global
 ………………
 ……………….

Query 2

presto:jmx> select * from jmx.current.”java.lang:type = compilation";

Result

node               | compilationtimemonitoringsupported |      name   |         objectname         | totalcompilationti
--------------------------------------+------------------------------------+--------------------------------+----------------------------+-------------------
ffffffff-ffff-ffff-ffff-ffffffffffff | true | HotSpot 64-Bit Tiered Compilers | java.lang:type=Compilation |       1276

Query 3

presto:jmx> select * from jmx.current."com.facebook.presto.server:name = taskresource";

Result

node                 | readfromoutputbuffertime.alltime.count 
 | readfromoutputbuffertime.alltime.max | readfromoutputbuffertime.alltime.maxer
 --------------------------------------+---------------------------------------+--------------------------------------+--------------------------------------- 
 ffffffff-ffff-ffff-ffff-ffffffffffff |                                   92.0 |                          1.009106149 |

The Hive connector allows querying data stored in a Hive data warehouse.

Prerequisites

  • Hadoop
  • Hive

Hopefully you have installed Hadoop and Hive on your machine. Start all the services one by one in the new terminal. Then, start hive metastore using the following command,

hive --service metastore

Presto uses Hive metastore service to get the hive table’s details.

Configuration Settings

Create a file “hive.properties” under “etc/catalog” directory. Use the following command.

$ cd etc $ cd catalog 
$ vi hive.properties  

connector.name = hive-cdh4 
hive.metastore.uri = thrift://localhost:9083

After making all the changes, save the file and quit the terminal.

Create Database

Create a database in Hive using the following query −

Query

hive> CREATE SCHEMA tutorials;

After the database is created, you can verify it using the “show databases” command.

Create Table

Create Table is a statement used to create a table in Hive. For example, use the following query.

hive> create table author(auth_id int, auth_name varchar(50), 
topic varchar(100) STORED AS SEQUENCEFILE;

Insert Table

Following query is used to insert records in hive’s table.

hive> insert into table author values (1,’ Doug Cutting’,Hadoop),
(2,’ James Gosling’,java),(3,’ Dennis Ritchie’,C);

Start Presto CLI

You can start Presto CLI to connect Hive storage plugin using the following command.

$ ./presto --server localhost:8080 --catalog hive —schema tutorials;

You will receive the following response.

presto:tutorials >

List Schemas

To list out all the schemas in Hive connector, type the following command.

Query

presto:tutorials > show schemas from hive;

Result

default  

tutorials

List Tables

To list out all the tables in “tutorials” schema, use the following query.

Query

presto:tutorials > show tables from hive.tutorials;

Result

author

Fetch Table

Following query is used to fetch all the records from hive’s table.

Query

presto:tutorials > select * from hive.tutorials.author;

Result

auth_id  |   auth_name    | topic 
---------+----------------+-------- 
       1 | Doug Cutting   | Hadoop 
       2 | James Gosling  | java 
       3 | Dennis Ritchie | C

The Kafka Connector for Presto allows to access data from Apache Kafka using Presto.

Prerequisites

Download and install the latest version of the following Apache projects.

  • Apache ZooKeeper
  • Apache Kafka

Start ZooKeeper

Start ZooKeeper server using the following command.

$ bin/zookeeper-server-start.sh config/zookeeper.properties

Now, ZooKeeper starts port on 2181.

Start Kafka

Start Kafka in another terminal using the following command.

$ bin/kafka-server-start.sh config/server.properties

After kafka starts, it uses the port number 9092.

TPCH Data

Download tpch-kafka

$  curl -o kafka-tpch 
https://repo1.maven.org/maven2/de/softwareforge/kafka_tpch_0811/1.0/kafka_tpch_ 
0811-1.0.sh

Now you have downloaded the loader from Maven central using the above command. You will get a similar response as the following.

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current 
                                 Dload  Upload   Total   Spent    Left  Speed 
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0  
  5 21.6M    5 1279k    0     0  83898      0  0:04:30  0:00:15  0:04:15  129k
  6 21.6M    6 1407k    0     0  86656      0  0:04:21  0:00:16  0:04:05  131k  
 24 21.6M   24 5439k    0     0   124k      0  0:02:57  0:00:43  0:02:14  175k 
 24 21.6M   24 5439k    0     0   124k      0  0:02:58  0:00:43  0:02:15  160k 
 25 21.6M   25 5736k    0     0   128k      0  0:02:52  0:00:44  0:02:08  181k 
 ………………………..

Then, make it executable using the following command,

$ chmod 755 kafka-tpch

Run tpch-kafka

Run the kafka-tpch program to preload a number of topics with tpch data using the following command.

Query

$ ./kafka-tpch load --brokers localhost:9092 --prefix tpch. --tpch-type tiny

Результат

2016-07-13T16:15:52.083+0530 INFO main io.airlift.log.Logging Logging 
to stderr
2016-07-13T16:15:52.124+0530 INFO main de.softwareforge.kafka.LoadCommand
Processing tables: [customer, orders, lineitem, part, partsupp, supplier,
nation, region]
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-1
de.softwareforge.kafka.LoadCommand Loading table 'customer' into topic 'tpch.customer'...
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-2
de.softwareforge.kafka.LoadCommand Loading table 'orders' into topic 'tpch.orders'...
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-3
de.softwareforge.kafka.LoadCommand Loading table 'lineitem' into topic 'tpch.lineitem'...
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-4
de.softwareforge.kafka.LoadCommand Loading table 'part' into topic 'tpch.part'...
………………………
……………………….

Теперь таблицы Kafka клиенты, заказы, поставщик и т. Д. Загружаются с помощью tpch.

Добавить настройки конфигурации

Давайте добавим следующие параметры конфигурации коннектора Kafka на сервер Presto.

connector.name = kafka  

kafka.nodes = localhost:9092  

kafka.table-names = tpch.customer,tpch.orders,tpch.lineitem,tpch.part,tpch.partsupp, 
tpch.supplier,tpch.nation,tpch.region  

kafka.hide-internal-columns = false

В приведенной выше конфигурации таблицы Kafka загружаются с помощью программы Kafka-tpch.

Запустить Presto CLI

Запустите Presto CLI, используя следующую команду:

$ ./presto --server localhost:8080 --catalog kafka —schema tpch;

Вот “tpch" - это схема коннектора Kafka, и вы получите следующий ответ.

presto:tpch>

Список таблиц

В следующем запросе перечислены все таблицы в “tpch” схема.

Запрос

presto:tpch> show tables;

Результат

Table 
---------- 
 customer 
 lineitem 
 nation 
 orders
 part 
 partsupp 
 region 
 supplier

Опишите таблицу клиентов

Следующий запрос описывает “customer” стол.

Запрос

presto:tpch> describe customer;

Результат

Column           |  Type   |                   Comment 
-------------------+---------+--------------------------------------------- 
 _partition_id     | bigint  | Partition Id 
 _partition_offset | bigint  | Offset for the message within the partition 
 _segment_start    | bigint  | Segment start offset 
 _segment_end      | bigint  | Segment end offset 
 _segment_count    | bigint  | Running message count per segment 
 _key              | varchar | Key text 
 _key_corrupt      | boolean | Key data is corrupt 
 _key_length       | bigint  | Total number of key bytes 
 _message          | varchar | Message text 
 _message_corrupt  | boolean | Message data is corrupt 
 _message_length   | bigint  | Total number of message bytes

Интерфейс JDBC Presto используется для доступа к приложению Java.

Предпосылки

Установите presto-jdbc-0.150.jar

Вы можете загрузить файл JDBC jar, перейдя по следующей ссылке:

https://repo1.maven.org/maven2/com/facebook/presto/presto-jdbc/0.150/

После загрузки файла jar добавьте его в путь к классам вашего Java-приложения.

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

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

Кодирование - PrestoJdbcSample.java

import java.sql.*; 
import com.facebook.presto.jdbc.PrestoDriver; 

//import presto jdbc driver packages here.  
public class PrestoJdbcSample {  
   public static void main(String[] args) {  
      Connection connection = null; 
      Statement statement = null;  
      try { 
         
         Class.forName("com.facebook.presto.jdbc.PrestoDriver");  
         connection = DriverManager.getConnection(
         "jdbc:presto://localhost:8080/mysql/tutorials", "tutorials", “"); 
         
         //connect mysql server tutorials database here 
         statement = connection.createStatement(); 
         String sql;  
         sql = "select auth_id, auth_name from mysql.tutorials.author”; 
        
         //select mysql table author table two columns  
         ResultSet resultSet = statement.executeQuery(sql);  
         while(resultSet.next()){  
            int id  = resultSet.getInt("auth_id"); 
            String name = resultSet.getString(“auth_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(); 
      } 
   } 
}

Сохраните файл и выйдите из приложения. Теперь запустите сервер Presto в одном терминале и откройте новый терминал для компиляции и выполнения результата. Ниже приведены шаги -

Компиляция

~/Workspace/presto/presto-jdbc $ javac -cp presto-jdbc-0.149.jar  PrestoJdbcSample.java

Исполнение

~/Workspace/presto/presto-jdbc $ java -cp .:presto-jdbc-0.149.jar  PrestoJdbcSample

Вывод

INFO: Logging initialized @146ms  
ID: 1; 
Name: Doug Cutting 
ID: 2; 
Name: James Gosling 
ID: 3; 
Name: Dennis Ritchie

Создайте проект Maven для разработки пользовательской функции Presto.

SimpleFunctionsFactory.java

Создайте класс SimpleFunctionsFactory для реализации интерфейса FunctionFactory.

package com.tutorialspoint.simple.functions;  

import com.facebook.presto.metadata.FunctionFactory; 
import com.facebook.presto.metadata.FunctionListBuilder; 
import com.facebook.presto.metadata.SqlFunction; 
import com.facebook.presto.spi.type.TypeManager;  
import java.util.List;  

public class SimpleFunctionFactory implements FunctionFactory { 
   
   private final TypeManager typeManager;  
   public SimpleFunctionFactory(TypeManager typeManager) { 
      this.typeManager = typeManager; 
   }  
    @Override 
    
   public List<SqlFunction> listFunctions() { 
      return new FunctionListBuilder(typeManager) 
      .scalar(SimpleFunctions.class) 
      .getFunctions(); 
   } 
}

SimpleFunctionsPlugin.java

Создайте класс SimpleFunctionsPlugin для реализации интерфейса плагина.

package com.tutorialspoint.simple.functions;  

import com.facebook.presto.metadata.FunctionFactory; 
import com.facebook.presto.spi.Plugin; 
import com.facebook.presto.spi.type.TypeManager; 
import com.google.common.collect.ImmutableList;  
import javax.inject.Inject; 
import java.util.List; 
import static java.util.Objects.requireNonNull;  

public class SimpleFunctionsPlugin implements Plugin {  
   private TypeManager typeManager; 
   @Inject 
   
   public void setTypeManager(TypeManager typeManager) { 
      this.typeManager = requireNonNull(typeManager, "typeManager is null”); 
      //Inject TypeManager class here 
   }  
   @Override 
   
   public <T> List<T> getServices(Class<T> type){ 
      if (type == FunctionFactory.class) { 
         return ImmutableList.of(type.cast(new SimpleFunctionFactory(typeManager))); 
      } 
      return ImmutableList.of(); 
   } 
}

Добавить файл ресурсов

Создайте файл ресурсов, указанный в пакете реализации.

(com.tutorialspoint.simple.functions.SimpleFunctionsPlugin)

Теперь перейдите в расположение файла ресурсов @ / path / to / resource /

Затем добавьте изменения,

com.facebook.presto.spi.Plugin

pom.xml

Добавьте следующие зависимости в файл pom.xml.

<?xml version = "1.0"?> 
<project xmlns = "http://maven.apache.org/POM/4.0.0"  
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0  
    http://maven.apache.org/xsd/maven-4.0.0.xsd">  
   
   <modelVersion>4.0.0</modelVersion> 
   <groupId>com.tutorialspoint.simple.functions</groupId> 
   <artifactId>presto-simple-functions</artifactId>  
   <packaging>jar</packaging>  
   <version>1.0</version>
   <name>presto-simple-functions</name>
   <description>Simple test functions for Presto</description> 
   <properties> 
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>  
   <dependencies> 
      <dependency> 
         <groupId>com.facebook.presto</groupId> 
         <artifactId>presto-spi</artifactId>
         <version>0.149</version> 
      </dependency>  
      <dependency> 
         <groupId>com.facebook.presto</groupId> 
         <artifactId>presto-main</artifactId> 
         <version>0.149</version> 
      </dependency>  
      <dependency> 
         <groupId>javax.inject</groupId> 
         <artifactId>javax.inject</artifactId> 
         <version>1</version> 
      </dependency>  
      <dependency> 
         <groupId>com.google.guava</groupId> 
         <artifactId>guava</artifactId> 
         <version>19.0</version> 
      </dependency> 
   </dependencies>  
   <build> 
      <finalName>presto-simple-functions</finalName>  
      <plugins>  
      <!-- Make this jar executable --> 
         <plugin> 
            <groupId>org.apache.maven.plugins</groupId> 
            <artifactId>maven-jar-plugin</artifactId> 
            <version>2.3.2</version> 
         </plugin> 
      </plugins> 
   </build> 
</project>

SimpleFunctions.java

Создайте класс SimpleFunctions, используя атрибуты Presto.

package com.tutorialspoint.simple.functions;  

import com.facebook.presto.operator.Description; 
import com.facebook.presto.operator.scalar.ScalarFunction; 
import com.facebook.presto.operator.scalar.StringFunctions; 
import com.facebook.presto.spi.type.StandardTypes; 
import com.facebook.presto.type.LiteralParameters; 
import com.facebook.presto.type.SqlType;  

public final class SimpleFunctions { 
   private SimpleFunctions() { 
   }  
    
   @Description("Returns summation of two numbers") 
   @ScalarFunction(“mysum") 
   //function name 
   @SqlType(StandardTypes.BIGINT) 
    
   public static long sum(@SqlType(StandardTypes.BIGINT) long num1, 
   @SqlType(StandardTypes.BIGINT) long num2) { 
      return num1 + num2; 
   } 
}

После создания приложения скомпилируйте и запустите приложение. Будет создан файл JAR. Скопируйте файл и переместите JAR-файл в каталог плагина целевого сервера Presto.

Компиляция

mvn compile

Исполнение

mvn package

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

$ ./presto --catalog mysql --schema default

Запрос

presto:default> select mysum(10,10);

Результат

_col0  
------- 
  20