
# DataArts Fabric SQL UDF概述
用户自定义函数（User-Defined Function，简称UDF）是指由用户根据特定需求自定义的函数，用于扩展数据库或数据处理系统的功能。UDF可以执行各种操作，如数据转换、复杂计算、数据聚合等，这些操作可能超出了系统提供的内置函数的能力。
UDF的主要用途包括：
- 扩展功能：UDF允许用户扩展数据库或数据处理系统的功能，执行内置函数不支持的操作。
- 复杂计算：UDF可用于执行复杂的数学或逻辑计算，这些计算可能涉及多个步骤和条件。
- 数据转换：UDF可用于数据清洗和转换，如格式化日期、转换字符串或编码数据。
- 业务逻辑封装：UDF可将业务逻辑封装在函数中，使得数据处理更加模块化和可重用。
- 性能优化：在某些情况下，通过UDF将复杂的计算逻辑移到数据库服务器上执行，可以减少数据传输和提高性能。
从类型上来分，UDF包括以下三种主要类型：
表1UDF类型 
| UDF类型                         | 输入值  | 返回值   | 描述                                                                                                                                                       |
|:---|:---|:---|:---|
| 标量函数（Scalar UDF，一般简称UDF）      | 一行数据 | 一个标量值 | Scalar UDF是一种用户自定义函数。Scalar UDF输入是数据库中一行数据，输出是一个标量值；对于每一行的输入数据处理是独立的，不依赖于其他行的数据。这类函数适用于需要对数据进行特定计算或转换的场景。本特性引入的Scalar UDF允许用户使用Python的语法在数据库中对数据进行计算或转换。 |
| 聚合函数（Aggregate UDF，简称UDAF）    | 多行数据 | 一个聚合值 | UDAF是一种聚合类型的用户自定义函数。UDAF的输入是一组数据行，而输出是对整组数据进行聚合后得到的单个结果值。UDAF通常用于分组统计、聚合计算等场景。                                                                           |
| 表值函数（Table-Valued UDF，简称UDTF） | 一行数据 | 多行结果  | UDTF是一种以表作为输出的用户自定义函数，其输入是一行数据，输出则是一个包含多行多列的表结构。UDTF通常用于行生成、数据展开、多值解析等场景                                                                                 |
   
#### 约束限制
- UDF编程语言仅支持Python。
- UDF的参数不支持设置默认值，如果创建函数时参数或返回值带有精度，不进行精度检测。
- 不支持函数重载。
 
