当前位置: 首页 > 知识库问答 >
问题:

将UDF函数插件到Presto中的步骤是什么?

邵胜涝
2023-03-14

我遵循了本教程并利用这个github项目编写了一个简单的'mysum'UDF函数。

@ScalarFunction("mysum")
@Description("Returns summation of two numbers")
@SqlType(StandardTypes.BIGINT)
public static long sum(@SqlType(StandardTypes.BIGINT) long num1, @SqlType(StandardTypes.BIGINT) long num2)
{
    return num1 + num2;
}

我按照下面的步骤插入UDF,但Presto未能导入该函数。由于关于编写和插入UDF的文档很少,因此非常感谢任何帮助。提前道谢。

  1. 运行mvn compilemvn package
  2. .jar文件复制到presto(解压缩)目录/users/nithin/presto-server-0.166/plugin/udfs/
  3. 下的plugins文件夹中
  4. 在Presto CLI中使用bin/launcher run运行select mysum(10,100)启动协调器,但抛出错误

下面是当我尝试在Presto cli中运行我的UDF(“mysum”)时的错误日志。很明显,Presto找不到UDF,所以插入没有成功。怎么解决?我错过了什么步骤吗?

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

共有1个答案

吕英豪
2023-03-14

连接器插件应该提供UDF类的列表。请参阅插件#GetFunctions

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

请重写方法并公开UDF类的类。

 类似资料:
  • 我知道对于应用程序,GoogleService-info.plist文件需要通过“添加文件到Runner”添加到Xcode中的Runner。我也做了同样的事情,但是对于我的插件的豆荚,我做了“添加文件到豆荚”。但是,在运行我的示例应用程序时,Xcode丢失了googleService-info.plist文件,因此调用失败。 顺便说一句,对于Android来说,一切都很好--插件可以成功地初始化F

  • 我正在阅读有关函数重载的内容,发现了以下内容: 编译器列出所有具有相同名称和相同参数数的函数,然后开始按固定顺序使用以下规则查找函数,并在存在匹配项时停止。 1) 一个函数,其参数类型与对其的调用完全相同。 2) 布尔- 3) 整数- 例如: 有人能详细说明数字2和3吗?并添加完整列表?

  • 本文向大家介绍什么是OneThink oneThink后台添加插件步骤,包括了什么是OneThink oneThink后台添加插件步骤的使用技巧和注意事项,需要的朋友参考一下 OneThink以其便捷的建站、丰富的扩展、灵活的二次开发,以及云服务的支持,为广大个人和企业建站带来新的契机和机遇,即将成为互联网新的弄潮儿。 OneThink特性介绍: 1. 基于ThinkPHP最新版本Thinkphp

  • 在Jenkins的工作中,我找不到任何关于“归档工件”选项到底做了什么的文档。 它是否将从机工作区的工件复制到主服务器上的某个文件夹? 或者它是否将文件从从属的工作区保存到同一个从属的“归档”位置?在这种情况下,如果从服务器被摧毁,这些文件就会消失。

  • 我使用Maven作为构建工具,Jenkins作为CI工具。目前我有一个配置有Maven构建步骤的Jenkins作业。 我开始使用SonarQube,我想知道使用Jenkins SonarQube插件并将SonarQube分析配置为构建后操作,比简单地将sonar:sonar添加到现有Maven构建步骤的目标中有什么优势。 谢谢和最好的问候, 罗纳德

  • 问题内容: 我有一台Jenkins主服务器,外加多台从属计算机,这些服务器一直在被创建和销毁。 我找不到有关Jenkins作业中“归档工件”选项的确切功能的任何文档。 它会将工件从从属机器的工作空间复制到主服务器上的某个文件夹吗? 还是将文件从从站的工作区保存到同一从站的“归档”位置?在这种情况下,如果从属服务器被破坏,这些文件将消失。 如果删除工作空间,那些归档的工件是否还可以生存? 如果删除构