UDF 有什么作用?

考查重点:领域函数与 SQL 扩展。UDF 把内置函数没有的领域规则暴露到 SQL,如特殊编码解析;定义输入输出、空值和性能边界

本题目录

参考答案

核心回答

UDF 是用户自定义函数,用于在 SQL 或数据处理框架中补充内置函数没有提供的计算逻辑,并把领域规则封装成可复用、可测试的处理单元。例如特殊编码解析、业务标签转换或领域算法,都可能通过自定义函数暴露给 SQL 使用。

UDF 有时泛指整类自定义函数,有时特指标量函数,回答时应结合引擎语境说明。Spark、Hive、Flink、MaxCompute 的开发接口、注册方式和执行约束并不完全相同。

UDF、UDAF 和 UDTF 如何区分

  • 标量 UDF:通常对一行输入的若干字段计算出一个返回值,例如把领域编码转换成标签。这个值也可能是结构或数组类型,不能简单理解为只能返回一个字符。
  • 聚合 UDAF:将一组输入聚合成一个结果,例如内置聚合无法表达的业务统计。分布式实现常包含中间状态和合并逻辑,需要保证分区合并后的结果正确。
  • 表值 UDTF:一次调用产生零行或多行、每行可含多列,例如把一条嵌套记录展开成多条明细。具体调用和关联方式由引擎决定。

这些名称描述的是输入与输出关系,不能把“返回数组”直接等同于“返回多行”。例如一个标量 UDF 可以返回一个数组值,是否再展开成多行是另一步语义。

什么时候值得使用

先检查内置表达式、字符串/日期/JSON 函数和内置聚合是否足够。内置能力通常更容易让优化器理解并参与代码生成、向量化或谓词优化。只有存在清楚的能力缺口,或确实需要统一领域规则时,再引入 UDF。

UDF 的成本可能包括逐行调用、序列化、跨语言进程通信和优化器可见性下降。Python UDF、向量化 UDF 与 JVM UDF 的开销也不同,不能笼统说所有 UDF 都一样慢或一样快。

实现时关注哪些边界

明确输入输出类型、NULL、空集合、异常、精度、时区和大数据量;聚合函数还要检查状态大小、合并顺序与数据倾斜。函数最好尽量确定、无外部副作用,避免每行调用远程服务放大延迟和重试风险。

注册和发布时管理函数版本、依赖包与引擎兼容性,保存回归样本并评估执行计划和实际耗时。引擎重试任务时函数可能重复执行,因此不能把一次求值当成可靠的一次业务扣款。

参考资料

相关面经

2 篇

OPPO

数据开发工程师
秋招一面
查看原面经 →
UDF作用

字节跳动

大数据开发工程师
校招秋招一面
查看原面经 →
什么场景下会用到UDF?

相关题目

4 题