数据岗位面试题更新 2026-08-05

请解释在 Presto 中如何通过用户自定义函数(UDF)来扩展其功能?

数据编码实现技术原理问题排查Presto

考察说明

考察对 Presto UDF 开发机制和扩展流程的理解。

回答思路

  1. 【回答框架 1】Presto 支持通过插件机制添加自定义函数,主要分为 UDF(标量函数)、UDAF(聚合函数)和 UDTF(表函数)。开发时需继承相应的基类,如 ScalarFunction 或 AggregationFunction,并使用注解定义函数名和参数类型。
  2. 【回答框架 2】开发步骤包括:创建 Maven 工程,添加 Presto SPI 依赖;编写函数类,使用 @ScalarFunction 等注解,方法需为 public static;在 resources/META-INF/services 下注册函数类,文件为 io.prestosql.spi.function.FunctionFactory 或类似接口。
  3. 【回答框架 3】部署时,将包含函数类和 SPI 依赖的 fat jar 放入 Presto 安装目录的 plugin 子目录,重启 Presto 或动态加载。之后即可通过 SHOW FUNCTIONS 验证,并在 SQL 中直接调用。
  4. 【回答框架 4】自定义函数需注意类型映射(如 Java 类型与 Presto 类型对应)、空值处理、并发安全等。Presto 函数必须是确定性的,除非显式标记为非确定性。
  5. 【关键点 1】Presto UDF 通过插件机制实现,核心是继承基类并使用注解声明函数。
  6. 【关键点 2】部署需将函数打包为插件放入 plugin 目录并重启或动态加载。
  7. 【关键点 3】函数类型包括标量、聚合和表函数,需映射正确的 Java/Presto 类型。
  8. 【易错点 1】函数必须注册在 META-INF/services 文件中,否则无法加载。
  9. 【易错点 2】忽略类型映射或空值处理可能导致运行时错误。
  10. 【易错点 3】非确定性函数未声明可能导致结果不一致。