Presto-カスタムUDFインスタンス(スカラー関数)
4914 ワード
背景紹介
この記事では主にPrestoにおけるUDFの開発について説明します.この例のカスタムメソッドの論理は簡単で,文字列のように伝達され,文字列の前にHelloを組み立てるのは,自分でScalar Functionを実現する方法を説明するためである.具体的な手順およびコード1を以下に示す.Mavenエンジニアリングpomを作成する.xml
HelloFunction.JAvaはメソッドの実際の論理を定義するために使用されます
HelloFunctionPlugin.JAvaはPluginコレクションへの統合登録に使用されます
mvnパッケージコマンド
targetの下のplugin_test-1.0.jar%PRESTO_へコピーHOME%/plugin/plugin_test/下、guava-21.0をコピーする.JArから上への経路でPS:plugin_testは工事名と一致することが望ましい
Plugins must be installed on all nodes in the Presto cluster (coordinator and workers). Prestoを起動し、クライアントを使用してクエリーselect hello(「levin」)を送信します.
OKこれでカスタムスカラー関数が完成しました.
集約関数など他の複雑な関数定義については、次のリンクを参照してください.
https://prestodb.io/docs/current/develop/spi-overview.html https://prestodb.io/docs/current/develop/functions.html https://github.com/prestodb/presto/tree/master/presto-teradata-functions
この記事では主にPrestoにおけるUDFの開発について説明します.この例のカスタムメソッドの論理は簡単で,文字列のように伝達され,文字列の前にHelloを組み立てるのは,自分でScalar Functionを実現する方法を説明するためである.具体的な手順およびコード1を以下に示す.Mavenエンジニアリングpomを作成する.xml
4.0.0
presto-plugin
com.levin.presto.plugin
plugin_test
1.0
com.facebook.presto
presto-root
0.187
0.187
com.facebook.presto
presto-spi
${presto.verison}
provided
com.google.guava
guava
com.fasterxml.jackson.core
jackson-annotations
provided
io.airlift
slice
provided
io.airlift
units
provided
org.openjdk.jol
jol-core
provided
com.mycila
license-maven-plugin
true
pl.project13.maven
git-commit-id-plugin
true
org.gaul
modernizer-maven-plugin
true
HelloFunction.JAvaはメソッドの実際の論理を定義するために使用されます
package com.levin.presto.plugin;
import com.facebook.presto.spi.function.Description;
import com.facebook.presto.spi.function.ScalarFunction;
import com.facebook.presto.spi.function.SqlType;
import com.facebook.presto.spi.type.StandardTypes;
import io.airlift.slice.Slice;
import io.airlift.slice.Slices;
public class HelloFunction {
@Description("Hello Function")
@ScalarFunction("hello") //
@SqlType(StandardTypes.VARCHAR) //
public static Slice hello(@SqlType(StandardTypes.VARCHAR) Slice str) {
String value=str.toStringUtf8();
return Slices.utf8Slice("Hello "+value);
}
}
HelloFunctionPlugin.JAvaはPluginコレクションへの統合登録に使用されます
package com.levin.presto.plugin;
import com.facebook.presto.spi.Plugin;
import com.google.common.collect.ImmutableSet;
import java.util.Set;
public class HelloFunctionPlugin implements Plugin {
@Override
public Set> getFunctions() {
return ImmutableSet.>builder().add(HelloFunction.class).build();
}
}
mvnパッケージコマンド
mvn clean package -Dcheckstyle.skip=true -Dcheckstyle.skipExec=true
targetの下のplugin_test-1.0.jar%PRESTO_へコピーHOME%/plugin/plugin_test/下、guava-21.0をコピーする.JArから上への経路でPS:plugin_testは工事名と一致することが望ましい
Plugins must be installed on all nodes in the Presto cluster (coordinator and workers). Prestoを起動し、クライアントを使用してクエリーselect hello(「levin」)を送信します.
presto> select hello('levin');
_col0
-------------
Hello levin
(1 row)
Query 20181108_095033_00002_9rg6y, FINISHED, 1 node
Splits: 17 total, 17 done (100.00%)
0:00 [0 rows, 0B] [0 rows/s, 0B/s]
OKこれでカスタムスカラー関数が完成しました.
集約関数など他の複雑な関数定義については、次のリンクを参照してください.
https://prestodb.io/docs/current/develop/spi-overview.html https://prestodb.io/docs/current/develop/functions.html https://github.com/prestodb/presto/tree/master/presto-teradata-functions