extend 节点基于表达式计算新列或覆盖已有列,适用于正则提取、类型转换、字段拼接和数据清洗等场景。
功能说明
extend 节点对每一行数据计算表达式,将结果作为新列追加或覆盖同名已有列。支持所有内建 SQL 函数,包括字符串函数、数学函数、正则函数和日期函数等。
每条记录独立计算,不改变行数。
正则提取:从原始文本中提取特定内容,例如用户提问部分。
类型转换:将字符串转为数值等。
拼接计算:组合多个字段生成新的派生字段。
数据清洗:去除空白字符、统一格式等。
节点配置
extend 节点的基本 JSON 配置结构如下:
{
"id": "node_1",
"type": "extend",
"parameters": {
"<字段名>": "<表达式>",
"<字段名>": "<表达式>"
}
}参数说明
参数 | 类型 | 必填 | 默认值 | 说明 |
| String | 是 | - | 键为目标列名,值为计算表达式。至少包含一组键值对。列名已存在则覆盖,不存在则新增。 |
支持的函数:所有 SQL 内建函数均可使用,包括但不限于:
字符串函数:
concat、substr、regexp_extract、replace、trim、lower、upper数学函数:
abs、ceil、floor、round类型转换:
cast、try_cast条件函数:
if、case when、coalesce、nullif
输入与输出
输入要求
上游节点输出的任意列数据。
表达式中引用的字段必须存在于输入数据中。
输出列
列名 | 类型 | 来源 | 说明 |
全部原始输入列 | - | 透传 | 保留全部上游列 |
| 由表达式决定 | 新增/覆盖 | 同名列被覆盖,新名称列被追加 |
行数变化
输出行数等于输入行数(M = N),每行独立计算。
使用示例
示例 1:正则提取
{
"id": "n2",
"type": "extend",
"parameters": {
"question": "regexp_extract(question, '用户提问:(.*)', 1)"
}
}从 question 字段中提取"用户提问:"后面的内容,覆盖原 question 列。
示例 2:新增派生列
{
"id": "n2",
"type": "extend",
"parameters": {
"summary": "concat(question, ' - ', output)",
"q_len": "length(question)"
}
}新增 summary 和 q_len 两个派生列。summary 拼接 question 和 output 字段,q_len 计算 question 字段的长度。
示例 3:管道组合
以下示例展示 project(字段选取)→ extend → where(筛选过滤)的组合模式,完成映射、转换、过滤的完整流程。
{
"nodes": [
{
"id": "n1", "type": "project",
"parameters": { "question": "a", "input": "b", "output": "c" }
},
{
"id": "n2", "type": "extend",
"parameters": { "question": "regexp_extract(question, '用户提问:(.*)', 1)" }
},
{
"id": "n3", "type": "where",
"parameters": { "filter": "length(question) > 10" }
}
]
}常见用法与异常处理
常见用法
适用于字段派生计算:正则提取、字符串处理、类型转换、JSON 字段提取等。
列名与已有列同名时覆盖原列,可利用此特性做原地转换(如清洗、格式化)。
常与where(筛选过滤) 搭配:先用
extend计算派生列,再用where基于派生列过滤。表达式支持所有 SQL 标量函数,例如
regexp_extract、length、json_extract等。一个
extend节点可同时定义多个派生列,无需拆分为多个节点。LLM 输出的 JSON 结果可通过
extend+json_extract提取具体字段。
异常处理
场景 | 行为 |
| 校验失败,至少需要一组表达式。 |
表达式中引用的字段不存在 | 运行时报错。 |
表达式语法错误 | 运行时报错,提示表达式解析失败。 |
列名与已有列冲突 | 覆盖已有列(设计意图,用于原地转换)。 |