# 创建UDTF
将一个表函数（UDTF）注册到LakeFormation。表函数可接收输入并返回多行多列结果。
#### 前提条件
- 已完成SDK安装。具体操作，请参见[Catalog SDK获取与安装](https://support.huaweicloud.com/sdkreference-aidatalake/aidatalake_09_0010.html)。

- 已准备好UDF可调用对象（函数、函数类或类实例），并标注了类型注解。
- 已开通OBS与LakeFormation服务，并获取对应endpoint、实例 ID、项目ID等。
 
#### 函数签名
```
client.create_udtf(
    udtf, /, *,
    database=None,
    name,
    signature=None,
    imports=None,
    runtime_env=None,
    description=None,
    pretty_name=None,
    is_strict=True,
    volatility="VOLATILE",
    is_batch=False,
    batch_size=None,
    cpu_arch=None,
    cpus=None,
    memory=None,
    device_type=None,
    devices=None,
) -> Function
```
#### 参数说明
| 参数          | 是否必选 | 类型                             | 默认值              | 说明                                                                                                                                                                                                                                       |
|:---|:---|:---|:---|:---|
| udtf        | 是    | Any（位置参数）                      | -             | UDTF 可调用对象（函数或可调用类）。                                                                                                                                                                                                                     |
| database    | 否    | str \| None                    | default_database | 目标数据库名；为None时使用客户端默认数据库。                                                                                                                                                                                                                 |
| name        | 是    | str                            | -                | 函数名，须以字母开头，仅含字母/数字/下划线，长度 3--128。                                                                                                                                                                                                        |
| signature   | 否    | Signature \| None              | None             | 显式函数签名；为None时由UDF注解自动推断。 关于signature的更多信息，请参见[signature说明](https://support.huaweicloud.com/sdkreference-aidatalake/aidatalake_09_0021.html)。                           |
| imports     | 否    | str \| Iterable\[str\] \| None | None             | 需要打入UDF包的文件/目录路径或URL列表。                                                                                                                                                                                                                  |
| runtime_env | 否    | str \| Mapping \| None         | None             | 运行时环境配置（python_version、pypi 依赖等），可传JSON字符串或字典。 关于runtime_env的更多信息，请参见[runtime_env说明](https://support.huaweicloud.com/sdkreference-aidatalake/aidatalake_09_0022.html)。 |
| description | 否    | str \| None                    | None             | 函数描述。                                                                                                                                                                                                                                    |
| pretty_name | 否    | str \| None                    | None             | 展示名；为None时使用name。                                                                                                                                                                                                                        |
| is_strict   | 否    | bool                           | True             | 函数是否严格（输入为NULL时是否直接返回NULL）。                                                                                                                                                                                                              |
| volatility  | 否    | str                            | "VOLATILE"       | 函数易变性：IMMUTABLE/STABLE/VOLATILE。                                                                                                                                                                                                         |
| is_batch    | 否    | bool                           | False            | 是否启用批量处理模式。                                                                                                                                                                                                                              |
| batch_size  | 否    | int \| None                    | None             | 批量处理每批大小；is_batch=True 时建议提供，须为正整数。                                                                                                                                                                                                      |
| cpu_arch    | 否    | str \| None                    | None             | CPU架构，取值arm或x86。                                                                                                                                                                                                                         |
| cpus        | 否    | float \| None                  | None             | CPU核数，最小0.33。                                                                                                                                                                                                                            |
| memory      | 否    | int \| None                    | None             | 内存大小，单位MB，最小1。                                                                                                                                                                                                                           |
| device_type | 否    | str \| None                    | None             | 设备类型，例如npu、gpu。                                                                                                                                                                                                                          |
| devices     | 否    | float \| None                  | None             | 设备数量，需为正数。                                                                                                                                                                                                                               |
   
#### 返回值
返回Function对象。
#### 示例代码
```
import pyarrow as pa
def split_range(start: int, end: int) -> pa.Table:
    return pa.table({"v": list(range(start, end))})
func = client.create_udtf(
    udf=split_range,
    name="split_range",
    description="生成 [start, end) 区间整数表",
)
print(f"UDTF registered: {func.function_name}")
```
