
# 概述
#### 功能描述
Remote UDTF（Remote User-Defined Table-Generating Function）为用户自定义表值函数，适用于单进多出业务场景。即其输入与输出是一对多的关系，读入一行数据，输出多个值可视为一张表。
本节内容以FunctionGraph作为Remote UDTF 的执行载体，介绍开发Remote UDTF到计算引擎调用的操作步骤。
#### 方案优势
Remote UDTF的优势在于风险隔离、资源解耦与成本优化。
- 风险隔离：当关键生产环境需要执行UDTF时，虽然技术上支持，但存在执行风险。 通过Remote UDTF将计算逻辑卸载到函数工作流FunctionGraph，既能保持业务功能，又能通过无服务器架构实现风险隔离。
  
- 资源解耦：对于大模型推理等计算密集型任务，为避免在Spark等集群中长期占用昂贵资源，兼顾功能需求、稳定性和成本效益，将计算密集型操作剥离至FunctionGraph执行
- 成本优化：Remote UDTF将default队列还原为纯数据通道，消除UDTF引发的风险，使其能为用户提供更经济，更安全的核心数据流服务。
 
#### 约束与限制
Remote UDTF只对单行数据产生作用，适用于单进单出的场景。
#### 环境准备
使用FunctionGraph开发调试Remote UDTF时，您需要先安装IDEA并配置Maven，下载依赖JAR包并配置FunctionGraph服务，做好Remote UDTF开发前准备工作。
表1UDTF开发环境 
| 准备项                | 说明                                                                                                                                                                                                      |
|:---|:---|
| 操作系统               | Windows系统，支持Windows7以上版本。                                                                                                                                                                               |
| 安装JDK              | JDK使用1.8版本。                                                                                                                                                                                             |
| 安装和配置IntelliJ IDEA | IntelliJ IDEA为进行应用开发的工具，版本要求使用2019.1或其他兼容版本。                                                                                                                                                            |
| 安装Maven            | 开发环境的基本配置。用于项目管理，贯穿软件开发生命周期。                                                                                                                                                                            |
| 下载依赖JAR包           | 依赖引入下载Jar包：spark-function-sdk_2.13-jar-with-dependencies.jar 获取方式：从https://repo.huaweicloud.com/repository/maven/huaweicloudsdk/地址下载。 |
   
#### UDTF与Remote UDTF的对比
- UDTF：适合对性能要求高且熟悉查询引擎开发语言的场景。执行效率高，但开发灵活性和安全性相对较低。
- Remote UDTF：适合需要调用外部服务、使用多种语言开发或对开发语言灵活性要求高的场景。具有较高的安全性和开发灵活性。
表2UDTF与Remote UDTF的对比 
| 特性    | UDTF                        | Remote UDTF                 |
|:---|:---|:---|
| 执行方式  | 在查询引擎本地执行                   | 通过调用函数托管服务执行                |
| 安全性   | 若UDTF代码不稳定，可能影响查询引擎进程       | 执行失败仅影响UDTF自身，不会导致整体作业进程。   |
| 性能    | 执行效率高                       | 但在向量化和批处理模式下，性能与本地UDTF相当    |
| 开发灵活性 | 与查询引擎代码耦合度高，开发限制较多          | 灵活，可调用任意其他服务或程序库，满足多样业务需求   |
| 开发成本  | 需熟悉查询引擎的开发环境和语言，开发成本较高      | 一次性开发投入，开发成本相对较低            |
| 适用场景  | 对性能要求极高的场景，且开发团队熟悉查询引擎的开发语言 | 对开发语言灵活性要求高、需要调用外部服务或程序库的场景 |
   
