Apache-presto-quick-guide

提供:Dev Guides
移動先:案内検索

Apache Presto-概要

データ分析とは、生データを分析して関連情報を収集し、意思決定を改善するプロセスです。 主に多くの組織でビジネス上の意思決定を行うために使用されます。 ビッグデータ分析には大量のデータが含まれ、このプロセスは非常に複雑であるため、企業はさまざまな戦略を使用します。

たとえば、Facebookはデータ主導型で世界最大のデータウェアハウス企業の1つです。 Facebookウェアハウスデータは、大規模な計算のためにHadoopに保存されます。 その後、ウェアハウスのデータがペタバイトに増加したとき、彼らは低遅延で新しいシステムを開発することに決めました。 2012年に、Facebookチームのメンバーは、ペタバイトのデータでも迅速に動作するインタラクティブなクエリ分析のために*「Presto」*を設計しました。

Apache Prestoとは何ですか?

Apache Prestoは、低レイテンシおよびインタラクティブなクエリ分析向けに最適化された分散型の並列クエリ実行エンジンです。 Prestoはクエリを簡単に実行し、ギガバイトからペタバイトにさえダウンタイムなしでスケーリングします。

1つのPrestoクエリで、HDFS、MySQL、Cassandra、Hiveなどの複数のソースからのデータを処理できます。 PrestoはJavaで構築されており、他のデータインフラストラクチャコンポーネントと簡単に統合できます。 Prestoは強力で、Airbnb、DropBox、Groupon、Netflixなどの大手企業が採用しています。

プレスト-機能

プレストには、次の機能が含まれています-

  • シンプルで拡張可能なアーキテクチャ。
  • プラグ可能なコネクタ-Prestoは、クエリ用のメタデータとデータを提供するプラグ可能なコネクタをサポートしています。
  • パイプライン化された実行-不要なI/Oレイテンシのオーバーヘッドを回避します。
  • ユーザー定義関数-アナリストはカスタムユーザー定義関数を作成して、簡単に移行できます。
  • ベクトル化された列処理。

プレスト-利点

Apache Prestoが提供する利点のリストは次のとおりです-

  • 特殊なSQL操作
  • インストールとデバッグが簡単
  • シンプルなストレージ抽象化
  • 低レイテンシでペタバイトのデータを迅速にスケーリング

Presto-アプリケーション

Prestoは、今日の最高の産業用アプリケーションのほとんどをサポートしています。 注目すべきアプリケーションをいくつか見てみましょう。

  • Facebook -Facebookはデータ分析のニーズに応えてPrestoを構築しました。 Prestoは、大量のデータを簡単にスケーリングします。
  • Teradata -Teradataは、ビッグデータ分析およびデータウェアハウジングでエンドツーエンドのソリューションを提供します。 PrestoへのTeradataの貢献により、より多くの企業がすべての分析ニーズを簡単に実現できます。
  • Airbnb -Prestoは、Airbnbデータインフラストラクチャの不可欠な部分です。 さて、何百人もの従業員が毎日このテクノロジーを使用してクエリを実行しています。

なぜプレストなのか?

Prestoは標準のANSI SQLをサポートしているため、データアナリストや開発者にとって非常に簡単です。 Javaで構築されていますが、メモリの割り当てとガベージコレクションに関連するJavaコードの典型的な問題を回避します。 Prestoには、Hadoopに優しいコネクタアーキテクチャがあります。 ファイルシステムを簡単にプラグインできます。

Prestoは複数のHadoopディストリビューションで実行されます。 さらに、Prestoは、Hadoopプラットフォームから、Cassandra、リレーショナルデータベース、またはその他のデータストアにクエリを実行できます。 このクロスプラットフォーム分析機能により、Prestoユーザーはギガバイトからペタバイトのデータまで最大のビジネス価値を引き出すことができます。

Apache Presto-アーキテクチャ

Prestoのアーキテクチャは、従来のMPP(大規模並列処理)DBMSアーキテクチャとほぼ同じです。 次の図は、Prestoのアーキテクチャを示しています。

Presto Architecture

上記の図は、さまざまなコンポーネントで構成されています。 次の表に、各コンポーネントの詳細を示します。

S.No Component & Description
1.

Client

クライアント(Presto CLI)は、SQLステートメントをコーディネーターに送信して結果を取得します。

2.

Coordinator

コーディネーターはマスターデーモンです。 コーディネーターは、最初にSQLクエリを解析してから、クエリ実行の分析と計画を行います。 スケジューラは、パイプラインの実行を実行し、最も近いノードに作業を割り当て、進行状況を監視します。

3.

Connector

ストレージプラグインはコネクタと呼ばれます。 Hive、HBase、MySQL、Cassandraなどがコネクタとして機能します。それ以外の場合は、カスタムも実装できます。 コネクタは、クエリのメタデータとデータを提供します。 コーディネーターはコネクタを使用して、クエリプランを作成するためのメタデータを取得します。

4.

Worker

コーディネーターは、タスクをワーカーノードに割り当てます。 ワーカーはコネクタから実際のデータを取得します。 最後に、ワーカーノードは結果をクライアントに配信します。

Presto-ワークフロー

Prestoは、ノードのクラスターで実行される分散システムです。 Prestoの分散クエリエンジンは、インタラクティブな分析用に最適化されており、複雑なクエリ、集計、結合、ウィンドウ関数などの標準ANSI SQLをサポートしています。 プレストアーキテクチャはシンプルで拡張可能です。 Prestoクライアント(CLI)は、SQLステートメントをマスターデーモンコーディネーターに送信します。

スケジューラは、実行パイプラインを介して接続します。 スケジューラは、データに最も近いノードに作業を割り当て、進行状況を監視します。 コーディネーターはタスクを複数のワーカーノードに割り当て、最後にワーカーノードが結果をクライアントに返します。 クライアントは、出力プロセスからデータをプルします。 拡張性が重要な設計です。 Hive、HBase、MySQLなどのプラグ可能なコネクタは、クエリのメタデータとデータを提供します。 Prestoは、これらの異なる種類のデータソースに対してSQLクエリ機能を簡単に提供できるようにする「シンプルなストレージ抽象化」を使用して設計されました。

実行モデル

Prestoは、SQLセマンティクスをサポートするように設計された演算子を使用して、カスタムクエリおよび実行エンジンをサポートします。 スケジューリングの改善に加えて、すべての処理はメモリ内にあり、異なるステージ間でネットワークを介してパイプライン処理されます。 これにより、不必要なI/Oレイテンシのオーバーヘッドが回避されます。

Apache Presto-インストール

この章では、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-2133151l

最新バージョンは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」ディレクトリを作成します

次のコードを使用して、Prestoインストールディレクトリ内にetcディレクトリを作成します-

$ cd presto-server-0.149
$ mkdir etc

このディレクトリは構成ファイルを保持します。 各ファイルを1つずつ作成しましょう。

ノードのプロパティ

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 Config

etcディレクトリ(etc/jvm.config)内にファイル「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

すべての変更を行った後、ファイルを保存し、ターミナルを終了します。

構成プロパティ

etcディレクトリ(etc/config.properties)内にファイル「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

ここに、

  • コーディネーター-マスターノード。
  • 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 -DiscoveryサーバーへのURI。

複数のマシン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

ログのプロパティ

etcディレクトリ(etc/log.properties)内にファイル「log.properties」を作成します。 このファイルには、名前付きロガー階層の最小ログレベルが含まれています。 次のコードを使用して定義されます-

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

ファイルを保存して、ターミナルを終了します。 ここでは、DEBUG、INFO、WARN、ERRORなどの4つのログレベルが使用されます。 デフォルトのログレベルはINFOです。

カタログのプロパティ

etcディレクトリ(etc/catalog)内に「カタログ」ディレクトリを作成します。 これはデータのマウントに使用されます。 たとえば、次の内容で etc/catalog/jmx.properties を作成し、* jmxコネクタ*をjmxカタログとしてマウントします-

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

プレストを開始

Prestoは、次のコマンドを使用して開始できます。

$ bin/launcher start

次に、これに似た応答が表示されます。

Started as 840

プレストを実行

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」コマンドを入力すると、実行中のデーモンが表示されます。

プレストを停止

すべての実行を実行した後、次のコマンドを使用してプレストサーバーを停止することができます-

$ bin/launcher stop

Apache Presto-構成設定

この章では、Prestoの構成設定について説明します。

プレスト検証

Presto Verifierは、Prestoを別のデータベース(MySQLなど)に対してテストしたり、2つの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ファイルをダウンロード

次のリンクにアクセスして、Presto-verifier jarファイルをダウンロードします。

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

テーブルを挿入

テーブルを作成した後、次のクエリを使用して2つのレコードを挿入します。

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');

ここでは、*を選択しますfrom mysql.test.product *クエリはmysqlカタログを参照し、 *test はデータベース名、 product はテーブル名です。 このようにして、Prestoサーバーを使用してmysqlコネクターにアクセスできます。

ここでは、パフォーマンスを確認するために、2つの同じ選択クエリが相互にテストされます。 同様に、他のクエリを実行してパフォーマンスの結果をテストできます。 2つのPrestoクラスターを接続して、パフォーマンス結果を確認することもできます。

Apache Presto-管理ツール

この章では、Prestoで使用される管理ツールについて説明します。 PrestoのWebインターフェースから始めましょう。

Webインターフェース

Prestoは、クエリを監視および管理するためのWebインターフェイスを提供します。 コーディネーターの構成プロパティーで指定されたポート番号からアクセスできます。

PrestoサーバーとPresto CLIを起動します。 その後、次のURLからWebインターフェイスにアクセスできます- http://localhost:8080/

Webインターフェイス

出力は上記の画面のようになります。

ここでは、メインページにクエリのリストと、一意のクエリID、クエリテキスト、クエリ状態、完了率、ユーザー名、このクエリの発信元などの情報があります。 最新のクエリが最初に実行され、次に完了または未完了のクエリが下部に表示されます。

Prestoのパフォーマンスの調整

Prestoクラスターにパフォーマンス関連の問題がある場合は、デフォルトの構成設定を次の設定に変更します。

構成プロパティ

  • *仕事。 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

Apache Presto-基本的なSQL操作

この章では、Prestoでクエリを作成および実行する方法について説明します。 Prestoがサポートする基本的なデータ型を見ていきましょう。

基本データ型

次の表に、Prestoの基本データ型を示します。

S.No Data type & Description
1.

VARCHAR

可変長文字データ

2.

BIGINT

64ビットの符号付き整数

3.

DOUBLE

64ビット浮動小数点の倍精度値

4.

DECIMAL

固定精度の10進数。 たとえば、DECIMAL(10,3)-10は精度です。 合計桁数および3は、小数点として表されるスケール値です。 スケールはオプションであり、デフォルト値は0です

5.

BOOLEAN

ブール値trueおよびfalse

6.

VARBINARY

可変長バイナリデータ

7.

JSON

JSONデータ

8.

DATE

年月日として表される日付データ型

9.

TIME, TIMESTAMP, TIMESTAMP with TIME ZONE

TIME-時刻(時間-分-秒-ミリ秒)

TIMESTAMP-日付と時刻

TIMEZAMP with TIME ZONE-値からのタイムゾーンを持つ日付と時刻

10.

INTERVAL

日付と時刻のデータ型をストレッチまたは拡張する

11.

ARRAY

指定されたコンポーネントタイプの配列。 たとえば、ARRAY [5,7]

12.

MAP

指定されたコンポーネントタイプ間をマッピングします。 たとえば、MAP(ARRAY ['one'、 'two']、ARRAY [5,7])

13.

ROW

名前付きフィールドで構成される行構造

Presto-演算子

Presto演算子を次の表にリストします。

S.No Operator & Description
1.

Arithmetic operator

Prestoは、+、-、*、/、%などの算術演算子をサポートしています

2.

Relational operator

<、>、⇐、> =、=、<>

3.

Logical operator

AND、OR、NOT

4.

Range operator

範囲演算子は、特定の範囲の値をテストするために使用されます。 Prestoは、BETWEEN、IS NULL、IS NOT NULL、GREATESTおよびLEASTをサポートします

5.

Decimal operator

2進算術10進演算子は10進タイプの2進算術演算を実行します単項10進演算子--*演算子*は否定を実行します

6.

String operator

’演算子*は文字列の連結を実行します
7.

Date and time operator

日付および時刻データ型で算術加算および減算演算を実行します

8.

Array operator

添字operator []-配列の要素にアクセスします

連結演算子

-配列または同じタイプの要素と配列を連結する
9.

Map operator

マップ添え字演算子[]-指定されたキーに対応する値をマップから取得します

Apache Presto-SQL関数

今のところ、Prestoでいくつかの簡単な基本クエリを実行することについて議論していました。 この章では、重要なSQL関数について説明します。

数学関数

数学関数は数式で動作します。 次の表で、関数のリストを詳細に説明します。

S.No. Function & Description
1.

abs(x)

  • x* の絶対値を返します
2.

cbrt(x)

  • x* の立方根を返します
3.

ceiling(x)

最も近い整数に切り上げられた x 値を返します

4.

ceil(x)

ceiling(x)のエイリアス

5.

degrees(x)

  • x* の次数値を返します
6.

e(x)

オイラーの数値のdouble値を返します

7.

exp(x)

オイラー数の指数値を返します

8.

floor(x)

  • x* を最も近い整数に切り捨てて返します
9.

from_base(string,radix)

基数として解釈される文字列の値を返します

10.

ln(x)

  • x* の自然対数を返します
11.

log2(x)

  • x* の2を底とする対数を返します
12.

log10(x)

  • x* の10を底とする対数を返します
13.

log(x,y)

  • x* の *y* 対数を返します
14.

mod(n,m)

  • n* を *m* で除算したモジュラス(剰余)を返します
15.

pi()

pi値を返します。 結果はdouble値として返されます

16.

power(x,p)

値の累乗 ‘p’x 値に戻します

17.

pow(x,p)

power(x、p)のエイリアス

18.

radians(x)

角度 x を度ラジアンに変換します

19.

rand()

ラジアンのエイリアス()

20.

random()

擬似乱数値を返します

21.

rand(n)

random()のエイリアス

22.

round(x)

xの丸められた値を返します

23.

round(x,d)

  • *小数点以下を丸めた *x
24.

sign(x)

xの符号関数を返します。つまり、

引数が0の場合は0

引数が0より大きい場合は1

引数が0より小さい場合は-1

二重引数の場合、関数はさらに返します-

引数がNaNの場合はNaN

引数が+ Infinityの場合は1

引数が-Infinityの場合、-1

25.

sqrt(x)

  • x* の平方根を返します
26.

to_base(x,radix)

戻りタイプはアーチャーです。 結果は x の基数として返されます

27.

truncate(x)

  • x* の値を切り捨てます
28.

width_bucket(x, bound1, bound2, n)

  • x* 指定されたbound1およびbound2の境界のビン番号とn個のバケットを返します。
29.

width_bucket(x, bins)

配列ビンで指定されたビンに従って x のビン番号を返します

三角関数

三角関数の引数はradians()として表されます。 次の表に関数を示します。

S.No Functions & Description
1.

acos(x)

逆コサイン値(x)を返します

2.

asin(x)

逆正弦値(x)を返します

3.

atan(x)

逆正接値(x)を返します

4.

atan2(y,x)

逆正接値(y/x)を返します

5.

cos(x)

コサイン値(x)を返します

6.

cosh(x)

双曲線余弦値(x)を返します

7.

sin(x)

サイン値(x)を返します

8.

tan(x)

タンジェント値(x)を返します

9.

tanh(x)

双曲線正接値(x)を返します

ビット単位関数

次の表に、ビットごとの関数を示します。

S.No Functions & Description
1.

bit_count(x, bits)

ビット数を数える

2.

bitwise_and(x,y)

2ビット、 x および y に対してビット単位のAND演算を実行します

3.

bitwise_or(x,y)

2ビットのビットごとのOR演算 x、y

4.

bitwise_not(x)

ビット x のビットごとの非演算

5.

bitwise_xor(x,y)

ビット x、y のXOR演算

文字列関数

次の表に、文字列関数を示します。

S.No Functions & Description
1.

concat(string1, …​, stringN)

指定された文字列を連結します

2.

length(string)

指定された文字列の長さを返します

3.

lower(string)

文字列の小文字形式を返します

4.

upper(string)

指定された文字列の大文字形式を返します

5.

lpad(string, size, padstring)

指定された文字列の左パディング

6.

ltrim(string)

文字列から先頭の空白を削除します

7.

replace(string, search, replace)

文字列値を置き換えます

8.

reverse(string)

文字列に対して実行された操作を元に戻します

9.

rpad(string, size, padstring)

指定された文字列の右パディング

10.

rtrim(string)

文字列から末尾の空白を削除します

11.

split(string, delimiter)

区切り文字で文字列を分割し、最大限度のサイズの配列を返します

12.

split_part(string, delimiter, index)

区切り文字で文字列を分割し、フィールドインデックスを返します

13.

strpos(string, substring)

文字列内の部分文字列の開始位置を返します

14.

substr(string, start)

指定された文字列の部分文字列を返します

15.

substr(string, start, length)

指定された文字列の特定の長さの部分文字列を返します

16.

trim(string)

文字列から先頭と末尾の空白を削除します

日付と時刻の関数

次の表に、日付と時刻の関数を示します。

S.No Functions & Description
1.

current_date

現在の日付を返します

2.

current_time

現在の時刻を返します

3.

current_timestamp

現在のタイムスタンプを返します

4.

current_timezone()

現在のタイムゾーンを返します

5.

now()

現在の日付、タイムスタンプ付きのタイムスタンプを返します

6.

localtime

現地時間を返します

7.

localtimestamp

ローカルタイムスタンプを返します

正規表現関数

次の表に、正規表現関数をリストします。

S.No Functions & Description
1.

regexp_extract_all(string, pattern)

パターンの正規表現に一致する文字列を返します

2.

regexp_extract_all(string, pattern, group)

パターンとグループの正規表現に一致する文字列を返します

3.

regexp_extract(string, pattern)

パターンの正規表現に一致する最初の部分文字列を返します

4.

regexp_extract(string, pattern, group)

パターンとグループの正規表現に一致する最初の部分文字列を返します

5.

regexp_like(string, pattern)

パターンに一致する文字列を返します。 文字列が返される場合、値はtrueになり、そうでない場合はfalse

6.

regexp_replace(string, pattern)

式に一致する文字列のインスタンスをパターンに置き換えます

7.

regexp_replace(string, pattern, replacement)

式に一致する文字列のインスタンスをパターンと置換に置き換えます

8.

regexp_split(string, pattern)

指定されたパターンの正規表現を分割します

JSON関数

次の表に、JSON関数を示します。

S.No Functions & Description
1.

json_array_contains(json, value)

値がjson配列に存在することを確認してください。 値が存在する場合はtrueを返し、そうでない場合はfalseを返します

2.

json_array_get(json_array, index)

JSON配列のインデックスの要素を取得します

3.

json_array_length(json)

JSON配列の長さを返します

4.

json_format(json)

JSON構造形式を返します

5.

json_parse(string)

文字列をJSONとして解析します

6.

json_size(json, json_path)

値のサイズを返します

URL関数

次の表に、URL関数をリストします。

S.No Functions & Description
1.

url_extract_host(url)

URLのホストを返します

2.

url_extract_path(url)

URLのパスを返します

3.

url_extract_port(url)

URLのポートを返します

4.

url_extract_protocol(url)

URLのプロトコルを返します

5.

url_extract_query(url)

URLのクエリ文字列を返します

集約関数

次の表に、集計関数を示します。

S.No Functions & Description
1.

avg(x)

指定された値の平均を返します

2.

min(x,n)

2つの値から最小値を返します

3.

max(x,n)

2つの値から最大値を返します

4.

sum(x)

値の合計を返します

5.

count(AST)

入力行の数を返します

6.

count(x)

入力値の数を返します

7.

checksum(x)

  • x* のチェックサムを返します
8.

arbitrary(x)

  • x* の任意の値を返します

カラー関数

次の表に、カラー関数を示します。

S.No Functions & Description
1.

bar(x, width)

rgb low_colorおよびhigh_colorを使用して単一のバーをレンダリングします

2.

bar(x, width, low_color, high_color)

指定された幅で単一のバーをレンダリングします

3.

color(string)

入力された文字列の色の値を返します

4.

render(x, color)

ANSIカラーコードを使用して特定の色を使用して値xをレンダリングします

5.

render(b)

ブール値bを受け入れ、ANSIカラーコードを使用して緑のtrueまたは赤のfalseをレンダリングします

6.

rgb(red, green, blue)

0から255の範囲のintパラメーターとして提供される3つのコンポーネントカラー値のRGB値をキャプチャするカラー値を返します

配列関数

次の表に、配列関数をリストします。

S.No Functions & Description
1.

array_max(x)

配列内の最大要素を見つけます

2.

array_min(x)

配列内の最小要素を見つけます

3.

array_sort(x)

配列内の要素を並べ替えます

4.

array_remove(x,element)

配列から特定の要素を削除します

5.

concat(x,y)

2つの配列を連結します

6.

contains(x,element)

配列内の指定された要素を検索します。 存在する場合はtrue、そうでない場合はfalseが返されます

7.

array_position(x,element)

配列内の指定された要素の位置を見つける

8.

array_intersect(x,y)

2つの配列間の交差を実行します

9.

element_at(array,index)

配列要素の位置を返します

10.

slice(x,start,length)

特定の長さで配列要素をスライスします

Teradata関数

次の表に、Teradataの関数を示します。

S.No Functions & Description
1.

index(string,substring)

指定された部分文字列を持つ文字列のインデックスを返します

2.

substring(string,start)

指定された文字列の部分文字列を返します。 ここで開始インデックスを指定できます

3.

substring(string,start,length)

特定の開始インデックスと文字列の長さに対して、指定された文字列の部分文字列を返します

Apache Presto-MySQLコネクタ

MySQLコネクタは、外部MySQLデータベースのクエリに使用されます。

前提条件

MySQLサーバーのインストール。

構成設定

マシンにmysqlサーバーがインストールされていることを願っています。 Prestoサーバーでmysqlプロパティを有効にするには、“ mysql.properties” *を“ etc/catalog” *ディレクトリに作成する必要があります。 次のコマンドを発行して、mysql.propertiesファイルを作成します。

$ cd etc
$ cd catalog
$ vi mysql.properties

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

ファイルを保存して、ターミナルを終了します。 上記のファイルでは、接続パスワードフィールドにmysqlパスワードを入力する必要があります。

MySQLサーバーでデータベースを作成する

MySQLサーバーを開き、次のコマンドを使用してデータベースを作成します。

create database tutorials

これで、サーバーに「チュートリアル」データベースが作成されました。 データベースタイプを有効にするには、クエリウィンドウでコマンド「use tutorials」を使用します。

テーブルを作成

「チュートリアル」データベースに簡単なテーブルを作成しましょう。

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

テーブルを挿入

テーブルを作成したら、次のクエリを使用して3つのレコードを挿入します。

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 * from author

結果

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

現在、MySQLサーバーを使用してデータを照会しています。 MysqlストレージプラグインをPrestoサーバーに接続しましょう。

Presto CLIを接続する

次のコマンドを入力して、Presto CLIでMySqlプラグインを接続します。

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

次の応答を受け取ります。

presto:tutorials>

ここで*「チュートリアル」*はmysqlサーバーのスキーマを指します。

スキーマのリスト

mysqlのすべてのスキーマをリストするには、Prestoサーバーで次のクエリを入力します。

問い合わせ

presto:tutorials> show schemas from mysql;

結果

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

この結果から、最初の3つのスキーマを定義済みとして、最後のスキーマを自分で作成したと結論付けることができます。

スキーマからテーブルを一覧表示する

次のクエリは、チュートリアルスキーマのすべてのテーブルをリストします。

問い合わせ

presto:tutorials> show tables from mysql.tutorials;

結果

  Table
--------
 author

このスキーマにはテーブルを1つだけ作成しました。 複数のテーブルを作成した場合、すべてのテーブルがリストされます。

テーブルの説明

テーブルフィールドを説明するには、次のクエリを入力します。

問い合わせ

presto:tutorials> describe mysql.tutorials.author;

結果

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

テーブルの列を表示

問い合わせ

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

結果

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

テーブルレコードへのアクセス

mysqlテーブルからすべてのレコードを取得するには、次のクエリを発行します。

問い合わせ

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

結果

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

この結果から、Prestoでmysqlサーバーレコードを取得できます。

asコマンドを使用してテーブルを作成

Mysqlコネクタはテーブルクエリの作成をサポートしていませんが、asコマンドを使用してテーブルを作成できます。

問い合わせ

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

結果

CREATE TABLE: 3 rows

このコネクタにはいくつかの制限があるため、行を直接挿入することはできません。 次のクエリをサポートできません-

  • つくる
  • インサート
  • 更新
  • 削除する *drop

新しく作成されたテーブルのレコードを表示するには、次のクエリを入力します。

問い合わせ

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

結果

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

Apache Presto-JMXコネクター

Java Management Extensions(JMX)は、JVM内で実行されているJava仮想マシンとソフトウェアに関する情報を提供します。 JMXコネクターは、PrestoサーバーのJMX情報を照会するために使用されます。

“ etc/catalog” *ディレクトリの下の“ jmx.properties” *ファイルをすでに有効にしているため。 次に、Perst CLIを接続してJMXプラグインを有効にします。

プレストCLI

問い合わせ

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

結果

次の応答を受け取ります。

presto:jmx>

JMXスキーマ

「jmx」内のすべてのスキーマをリストするには、次のクエリを入力します。

問い合わせ

presto:jmx> show schemas from jmx;

結果

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

テーブルを表示

「現在の」スキーマのテーブルを表示するには、次のコマンドを使用します。

クエリ1

presto:jmx> show tables from jmx.current;

結果

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

クエリ2

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

結果

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

クエリ3

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

結果

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

Apache Presto-HIVEコネクタ

Hiveコネクタを使用すると、Hiveデータウェアハウスに保存されているデータを照会できます。

前提条件

  • Hadoop
  • Hive

HadoopとHiveがマシンにインストールされていることを願っています。 新しいターミナルですべてのサービスを1つずつ開始します。 次に、次のコマンドを使用してハイブメタストアを開始します。

hive --service metastore

PrestoはHiveメタストアサービスを使用して、ハイブテーブルの詳細を取得します。

構成設定

“ etc/catalog” *ディレクトリの下に hive.properties ファイルを作成します。 次のコマンドを使用します。

$ cd etc
$ cd catalog
$ vi hive.properties

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

すべての変更を行った後、ファイルを保存してターミナルを終了します。

データベースを作成する

次のクエリを使用してHiveでデータベースを作成します-

問い合わせ

hive> CREATE SCHEMA tutorials;

データベースが作成されたら、*“ show databases” *コマンドを使用して確認できます。

テーブルを作成

Create Tableは、Hiveでテーブルを作成するために使用されるステートメントです。 たとえば、次のクエリを使用します。

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

テーブルを挿入

次のクエリを使用して、ハイブのテーブルにレコードを挿入します。

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

Presto CLIを起動します

次のコマンドを使用して、Presto CLIを起動してHiveストレージプラグインを接続できます。

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

次の応答を受け取ります。

presto:tutorials >

スキーマのリスト

Hiveコネクターのすべてのスキーマをリストするには、次のコマンドを入力します。

問い合わせ

presto:tutorials > show schemas from hive;

結果

default

tutorials

リスト表

「チュートリアル」スキーマのすべてのテーブルをリストするには、次のクエリを使用します。

問い合わせ

presto:tutorials > show tables from hive.tutorials;

結果

author

テーブルを取得

次のクエリを使用して、ハイブのテーブルからすべてのレコードを取得します。

問い合わせ

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

結果

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

Apache Presto-KAFKAコネクター

PrestoのKafkaコネクタを使用すると、Prestoを使用してApache Kafkaのデータにアクセスできます。

前提条件

次のApacheプロジェクトの最新バージョンをダウンロードしてインストールします。

  • Apache ZooKeeper
  • アパッチカフカ

ZooKeeperを起動します

次のコマンドを使用して、ZooKeeperサーバーを起動します。

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

現在、ZooKeeperは2181でポートを開始します。

カフカを開始

次のコマンドを使用して、別の端末でKafkaを起動します。

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

kafkaの起動後、ポート番号9092が使用されます。

TPCHデータ

ダウンロードtpch-kafka

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

これで、上記のコマンドを使用してMavenセントラルからローダーをダウンロードしました。 次のような応答が返されます。

% 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
 ………………………..

次に、次のコマンドを使用して実行可能にします。

$ chmod 755 kafka-tpch

tpch-kafkaを実行します

次のコマンドを使用して、kafka-tpchプログラムを実行し、tpchデータを含む多数のトピックをプリロードします。

問い合わせ

$ ./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を使用してロードされます。

構成設定を追加

Prestoサーバーに次のKafkaコネクター構成設定を追加しましょう。

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

Apache Presto-JDBCインターフェース

PrestoのJDBCインターフェースは、Javaアプリケーションへのアクセスに使用されます。

前提条件

presto-jdbc-0.150.jarをインストールします

次のリンクにアクセスして、JDBC jarファイルをダウンロードできます。

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

jarファイルをダウンロードしたら、Javaアプリケーションのクラスパスに追加します。

シンプルなアプリケーションを作成する

JDBCインターフェースを使用して簡単なJavaアプリケーションを作成しましょう。

コーディング-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();
      }
   }
}

ファイルを保存して、アプリケーションを終了します。 次に、1つのターミナルで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

Apache Presto-カスタム関数アプリケーション

Mavenプロジェクトを作成して、Prestoカスタム関数を開発します。

SimpleFunctionsFactory.java

FunctionFactoryインターフェイスを実装するSimpleFunctionsFactoryクラスを作成します。

package com.finddevguides.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.finddevguides.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.finddevguides.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.finddevguides.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

Presto属性を使用してSimpleFunctionsクラスを作成します。

package com.finddevguides.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