Apache-presto-quick-guide
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のアーキテクチャを示しています。
上記の図は、さまざまなコンポーネントで構成されています。 次の表に、各コンポーネントの詳細を示します。
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/
出力は上記の画面のようになります。
ここでは、メインページにクエリのリストと、一意のクエリ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. |
Prestoは、+、-、*、/、%などの算術演算子をサポートしています |
2. |
<、>、⇐、> =、=、<> |
3. |
AND、OR、NOT |
4. |
範囲演算子は、特定の範囲の値をテストするために使用されます。 Prestoは、BETWEEN、IS NULL、IS NOT NULL、GREATESTおよびLEASTをサポートします |
5. |
2進算術10進演算子は10進タイプの2進算術演算を実行します単項10進演算子--*演算子*は否定を実行します |
6. |
|
’演算子*は文字列の連結を実行します | |
7. |
日付および時刻データ型で算術加算および減算演算を実行します |
8. |
添字operator []-配列の要素にアクセスします 連結演算子 |
-配列または同じタイプの要素と配列を連結する | |
9. |
マップ添え字演算子[]-指定されたキーに対応する値をマップから取得します |
Apache Presto-SQL関数
今のところ、Prestoでいくつかの簡単な基本クエリを実行することについて議論していました。 この章では、重要なSQL関数について説明します。
数学関数
数学関数は数式で動作します。 次の表で、関数のリストを詳細に説明します。
S.No. | Function & Description |
---|---|
1. |
|
2. |
|
3. |
最も近い整数に切り上げられた x 値を返します |
4. |
ceil(x) ceiling(x)のエイリアス |
5. |
|
6. |
オイラーの数値のdouble値を返します |
7. |
exp(x) オイラー数の指数値を返します |
8. |
|
9. |
from_base(string,radix) 基数として解釈される文字列の値を返します |
10. |
ln(x)
|
11. |
|
12. |
log10(x)
|
13. |
log(x,y)
|
14. |
|
15. |
pi() pi値を返します。 結果はdouble値として返されます |
16. |
値の累乗 ‘p’ を x 値に戻します |
17. |
pow(x,p) power(x、p)のエイリアス |
18. |
角度 x を度ラジアンに変換します |
19. |
rand() ラジアンのエイリアス() |
20. |
擬似乱数値を返します |
21. |
rand(n) random()のエイリアス |
22. |
xの丸められた値を返します |
23. |
round(x,d)
|
24. |
sign(x) xの符号関数を返します。つまり、 引数が0の場合は0 引数が0より大きい場合は1 引数が0より小さい場合は-1 二重引数の場合、関数はさらに返します- 引数がNaNの場合はNaN 引数が+ Infinityの場合は1 引数が-Infinityの場合、-1 |
25. |
|
26. |
戻りタイプはアーチャーです。 結果は x の基数として返されます |
27. |
|
28. |
width_bucket(x, bound1, bound2, n)
|
29. |
配列ビンで指定されたビンに従って x のビン番号を返します |
三角関数
三角関数の引数はradians()として表されます。 次の表に関数を示します。
S.No | Functions & Description |
---|---|
1. |
逆コサイン値(x)を返します |
2. |
asin(x) 逆正弦値(x)を返します |
3. |
atan(x) 逆正接値(x)を返します |
4. |
逆正接値(y/x)を返します |
5. |
cos(x) コサイン値(x)を返します |
6. |
双曲線余弦値(x)を返します |
7. |
サイン値(x)を返します |
8. |
tan(x) タンジェント値(x)を返します |
9. |
tanh(x) 双曲線正接値(x)を返します |
ビット単位関数
次の表に、ビットごとの関数を示します。
S.No | Functions & Description |
---|---|
1. |
ビット数を数える |
2. |
2ビット、 x および y に対してビット単位のAND演算を実行します |
3. |
2ビットのビットごとのOR演算 x、y |
4. |
ビット x のビットごとの非演算 |
5. |
ビット x、y のXOR演算 |
文字列関数
次の表に、文字列関数を示します。
S.No | Functions & Description |
---|---|
1. |
指定された文字列を連結します |
2. |
指定された文字列の長さを返します |
3. |
文字列の小文字形式を返します |
4. |
指定された文字列の大文字形式を返します |
5. |
指定された文字列の左パディング |
6. |
文字列から先頭の空白を削除します |
7. |
replace(string, search, replace) 文字列値を置き換えます |
8. |
文字列に対して実行された操作を元に戻します |
9. |
指定された文字列の右パディング |
10. |
文字列から末尾の空白を削除します |
11. |
区切り文字で文字列を分割し、最大限度のサイズの配列を返します |
12. |
split_part(string, delimiter, index) 区切り文字で文字列を分割し、フィールドインデックスを返します |
13. |
文字列内の部分文字列の開始位置を返します |
14. |
指定された文字列の部分文字列を返します |
15. |
指定された文字列の特定の長さの部分文字列を返します |
16. |
文字列から先頭と末尾の空白を削除します |
日付と時刻の関数
次の表に、日付と時刻の関数を示します。
S.No | Functions & Description |
---|---|
1. |
現在の日付を返します |
2. |
現在の時刻を返します |
3. |
現在のタイムスタンプを返します |
4. |
現在のタイムゾーンを返します |
5. |
現在の日付、タイムスタンプ付きのタイムスタンプを返します |
6. |
現地時間を返します |
7. |
ローカルタイムスタンプを返します |
正規表現関数
次の表に、正規表現関数をリストします。
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. |
パターンに一致する文字列を返します。 文字列が返される場合、値はtrueになり、そうでない場合はfalse |
6. |
regexp_replace(string, pattern) 式に一致する文字列のインスタンスをパターンに置き換えます |
7. |
regexp_replace(string, pattern, replacement) 式に一致する文字列のインスタンスをパターンと置換に置き換えます |
8. |
指定されたパターンの正規表現を分割します |
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配列の長さを返します |
4. |
JSON構造形式を返します |
5. |
文字列をJSONとして解析します |
6. |
値のサイズを返します |
URL関数
次の表に、URL関数をリストします。
S.No | Functions & Description |
---|---|
1. |
URLのホストを返します |
2. |
URLのパスを返します |
3. |
URLのポートを返します |
4. |
URLのプロトコルを返します |
5. |
URLのクエリ文字列を返します |
集約関数
次の表に、集計関数を示します。
S.No | Functions & Description |
---|---|
1. |
avg(x) 指定された値の平均を返します |
2. |
2つの値から最小値を返します |
3. |
2つの値から最大値を返します |
4. |
値の合計を返します |
5. |
入力行の数を返します |
6. |
入力値の数を返します |
7. |
|
8. |
|
カラー関数
次の表に、カラー関数を示します。
S.No | Functions & Description |
---|---|
1. |
rgb low_colorおよびhigh_colorを使用して単一のバーをレンダリングします |
2. |
bar(x, width, low_color, high_color) 指定された幅で単一のバーをレンダリングします |
3. |
入力された文字列の色の値を返します |
4. |
ANSIカラーコードを使用して特定の色を使用して値xをレンダリングします |
5. |
ブール値bを受け入れ、ANSIカラーコードを使用して緑のtrueまたは赤のfalseをレンダリングします |
6. |
rgb(red, green, blue) 0から255の範囲のintパラメーターとして提供される3つのコンポーネントカラー値のRGB値をキャプチャするカラー値を返します |
配列関数
次の表に、配列関数をリストします。
S.No | Functions & Description |
---|---|
1. |
配列内の最大要素を見つけます |
2. |
配列内の最小要素を見つけます |
3. |
配列内の要素を並べ替えます |
4. |
配列から特定の要素を削除します |
5. |
2つの配列を連結します |
6. |
配列内の指定された要素を検索します。 存在する場合はtrue、そうでない場合はfalseが返されます |
7. |
配列内の指定された要素の位置を見つける |
8. |
2つの配列間の交差を実行します |
9. |
配列要素の位置を返します |
10. |
特定の長さで配列要素をスライスします |
Teradata関数
次の表に、Teradataの関数を示します。
S.No | Functions & Description |
---|---|
1. |
指定された部分文字列を持つ文字列のインデックスを返します |
2. |
指定された文字列の部分文字列を返します。 ここで開始インデックスを指定できます |
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