2017-02-28 2 views
0

Ich folgte this Tutorial und hebelte this Github-Projekt und schrieb eine einfache 'Mysum' UDF-Funktion.Was sind die Schritte zum Einfügen von UDF-Funktionen in Presto?

Ich folgte den folgenden Schritten, um die UDF zu pluginieren, aber Presto kann die Funktion nicht importieren. Da es sehr wenig Dokumentation über das Schreiben und Einstecken von UDFs gibt, würde jede Hilfe sehr geschätzt werden. Vielen Dank im Voraus.

  1. lief mvn compile und mvn package
  2. die .jar Datei in Plugins-Ordner unter presto (entpackten) Verzeichnis /Users/nithin/presto-server-0.166/plugin/udfs/
  3. gestartet Koordinator mit bin/launcher run lief select mysum(10,100) in Presto CLI kopiert, sondern wirft Fehler

Unten ist ein Fehlerprotokoll, wenn ich versuche, meine UDF ('mysum') in Presto CLI auszuführen. Es ist ziemlich offensichtlich, dass Presto die UDF nicht finden kann, daher war das Einstecken nicht erfolgreich. Wie behebt man das? Vermisse ich irgendeinen Schritt?

➜ Workspaces ./presto.jar --server localhost:8080 --catalog mysql --schema default --debug 
presto:default> select mysum(99,100); 
Query 20170228_183509_00002_vr5dt failed: line 1:8: Function mysum not registered 
com.facebook.presto.sql.analyzer.SemanticException: line 1:8: Function mysum not registered 
    at com.facebook.presto.sql.analyzer.ExpressionAnalyzer$Visitor.visitFunctionCall(ExpressionAnalyzer.java:824) 
    at com.facebook.presto.sql.analyzer.ExpressionAnalyzer$Visitor.visitFunctionCall(ExpressionAnalyzer.java:255) 
    at com.facebook.presto.sql.tree.FunctionCall.accept(FunctionCall.java:111) 
    at com.facebook.presto.sql.tree.StackableAstVisitor.process(StackableAstVisitor.java:26) 
    at com.facebook.presto.sql.analyzer.ExpressionAnalyzer$Visitor.process(ExpressionAnalyzer.java:274) 
    at com.facebook.presto.sql.analyzer.ExpressionAnalyzer.analyze(ExpressionAnalyzer.java:231) 
    at com.facebook.presto.sql.analyzer.ExpressionAnalyzer.analyzeExpression(ExpressionAnalyzer.java:1406) 
    at com.facebook.presto.sql.analyzer.StatementAnalyzer.analyzeExpression(StatementAnalyzer.java:1802) 
    at com.facebook.presto.sql.analyzer.StatementAnalyzer.analyzeSelect(StatementAnalyzer.java:1623) 
    at com.facebook.presto.sql.analyzer.StatementAnalyzer.visitQuerySpecification(StatementAnalyzer.java:800) 
    at com.facebook.presto.sql.analyzer.StatementAnalyzer.visitQuerySpecification(StatementAnalyzer.java:188) 
    at com.facebook.presto.sql.tree.QuerySpecification.accept(QuerySpecification.java:127) 
    at com.facebook.presto.sql.tree.AstVisitor.process(AstVisitor.java:27) 
    at com.facebook.presto.sql.analyzer.StatementAnalyzer.visitQuery(StatementAnalyzer.java:550) 
    at com.facebook.presto.sql.analyzer.StatementAnalyzer.visitQuery(StatementAnalyzer.java:188) 
    at com.facebook.presto.sql.tree.Query.accept(Query.java:94) 
    at com.facebook.presto.sql.tree.AstVisitor.process(AstVisitor.java:27) 
    at com.facebook.presto.sql.analyzer.Analyzer.analyze(Analyzer.java:68) 
    at com.facebook.presto.sql.analyzer.Analyzer.analyze(Analyzer.java:60) 
    at com.facebook.presto.execution.SqlQueryExecution.doAnalyzeQuery(SqlQueryExecution.java:290) 
    at com.facebook.presto.execution.SqlQueryExecution.analyzeQuery(SqlQueryExecution.java:276) 
    at com.facebook.presto.execution.SqlQueryExecution.start(SqlQueryExecution.java:234) 
    at com.facebook.presto.execution.QueuedExecution.lambda$start$1(QueuedExecution.java:63) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
select mysum(99,100) 

Antwort

0

Ihr Anschluss-Plugin die Liste der UDF-Klassen bieten sollte. Siehe Plugin#getFunctions

default Set<Class<?>> getFunctions() 
{ 
    return emptySet(); 
} 

die Methode Bitte außer Kraft setzen und setzen Klassen von UDF-Klassen.

Verwandte Themen