
# 创建函数流
函数流是一个面向无服务器计算领域，编排无服务器分布式应用的工作流服务。基于该服务，用户可以通过Low Code以及可视化的方式将多个独立的无服务器函数用顺序、分支、并行等方式轻松编排成一个完整的应用，并提供监控和管理平台，用于诊断和调试应用。
本章节主要介绍如何创建函数流任务和编排函数流任务。您可以根据实际业务场景来创建标准函数流或快速函数流。
- 标准模式面向普通的业务场景，支持长时间任务，支持执行历史持久化和查询，只支持异步调用，在函数流运行记录页面查询执行结果。
- 快速模式面向业务执行时长较短，需要极致性能的场景，只支持流程执行时长低于5分钟的场景，不支持执行历史持久化（比如不支持查询执行节点的历史信息），支持同步和异步调用。通过同步执行函数流接口进行函数流的同步执行，接口直接返回函数流执行结果，同时日志页面查看上报到LTS的函数流执行日志。
  ![](https://support.huaweicloud.com/usermanual-functiongraph/public_sys-resources/note_3.0-zh-cn.png)
  快速函数流限时免费，欢迎体验！
  
#### 约束与限制
当前仅"华北-北京四、华东-上海二、华南-广州、西南-贵阳一、华东-上海一、亚太-新加坡"区域支持函数流功能。
#### 创建函数流
**操作步骤**
1. 登录[函数工作流控制台](https://console.huaweicloud.com/functiongraph/?locale=zh-cn)，左侧导航栏单击"函数流"。
2. 单击"创建标准函数流"或"创建快速函数流"，进入新建函数流编排页面。
3. 在函数流编排区域，通过拖拽组件进行流程编排，详情请参见[函数流组件配置说明](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0406.html)。
   设计的函数流必须是一个有向无环图，从开始节点出发，开始节点后续必须且只能连接一个节点（除了异常处理和结束节点）；流程必须在某一个节点结束，结束流程有两种形式：
   - 流程中存在的节点没有任何后继节点，且后续节点非条件分支，并行分支或开始节点。
   
   - 流程中存在结束节点，且结束节点后续无其他节点。
     
4. 流程中的所有节点参数配置完成后，单击右上角的"保存"，进行参数配置，最后单击"确定"。
   表1配置信息 
   | 参数       | 说明                                                                                                                                                                                                                                                                                                                                                                                                          |
   |:---|:---|
   | 名称       | 输入函数流名称。                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 企业项目     | 选择企业项目。                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 日志记录     | 创建快速函数流，保存时需要选择此参数。 - ALL：为所有事件启用日志记录。  - ERROR：仅启用错误日志记录。  - NONE：关闭日志记录。   |
   | 合并参数     | 将上一个节点的输出与下一个节点的输入合并为输入。                                                                                                                                                                                                                                                                                                                                                                                    |
   | 支持返回流式数据 | 创建快速函数流时可配置此参数。开启后，函数流执行支持返回流式数据，可参见流式文件处理。 **需函数流中函数节点的代码调用流式数据接口。**                                                                                                                                                                                                                                                                                              |
   | 描述       | 输入函数流的简要描述。                                                                                                                                                                                                                                                                                                                                                                                                 |
      
   
 
 #### 表达式说明
函数流的异常处理控制器组件中配置"重试条件(JSONPath)"和条件分支控制器组件中"输入过滤表达式/输出过滤表达式"的JSONPath表达式结构为\[JsonPath\] + \[逻辑运算符\] + \[对比数据\]，如示例：$.age \>= 20。
表2JSONPath说明 
| 操作符           | 是否支持 | 说明                     |
|:---|:---|:---|
| $             | 是    | 执行查询的root，所有正则表达式由此启动。 |
| @             | 是    | 过滤正在处理的当前位置。           |
| .             | 是    | 子节点。                   |
| \[ (, )\]     | 是    | 数组索引。                  |
| \[start:end\] | 是    | 数组切片运算符。               |
| \[?()\]       | 是    | 过滤表达式， 表达式必须计算为布尔值。    |
   
**示例**
```
{  
     "fruits": [ "apple", "orange", "pear" ],  
     "vegetables": [{      
     "veggieName": "potato",
     "veggieLike": true    
      },     
      {       
          "veggieName": "broccoli",      
          "veggieLike": false    
      }] 
}
```
- 简单取值 $.fruits表达式含义：取出fruits下对应的所有value。
  $.fruits解析结果：\["apple","orange","pear"\]。
  
- 简单过滤 表达式：$.vegetables\[?(@.veggieLike == true)\].veggieName。
  表达式含义：取出key值vegetables对应的所有value，并根据过滤条件输出veggieLike为True的veggieName。
  ```
  取值结果：[potato]
  ```
  
 
 #### 运算符说明
使用以下数据作为例子中的输入参数：
```
{
  "name" : "apple",
  "weight": 13.4,
  "type": [3,4,6,8],
  "obj": {
        "a" : 1
   }
}
```
表3逻辑运算符 
| **符号** | **作用** | **例子**                                | **返回值** | **备注**                              |
|:---|:---|:---|:---|:---|
| ==     | 相等     | $.name == 'apple'                     | true    | 支持的数据类型包括：int,float,string,bool,nil |
| !=     | 不等     | $.name != 'apple'                     | false   | 支持的数据类型包括：int,float,string,bool,nil |
| \<     | 小于     | $.weight \< 12                        | false   | 只支持数字类型                             |
| \>     | 大于     | $.weight \> 12                        | true    | 只支持数字类型                             |
| \<=    | 小于等于   | $.weight \<= 13.4                     | true    | 只支持数字类型                             |
| \>=    | 大于等于   | $.weight \>= 13.4                     | true    | 只支持数字类型                             |
| '\*'   | 通配符    | $.weight == '\*'                      | true    | 只支持在== 比较中使用                        |
| \|\|   | 或      | $.name == 'apple' \|\| $.weight \< 12 | true    | 支持使用（）的复杂与或逻辑                       |
| \&\&   | 且      | $.name == 'apple' \&\& $.weight \< 12 | false   | 支持使用（）的复杂与或逻辑                       |
   
- 字符串格式常量需要使用''包含，例如：'apple'。
- jsonpath表达式中不能出现上述保留字符'=', '!=', '\<', '\>', '\|', '\&'。
 
