关于 di-agent-flow-datastage
di-agent-flow-datastage 是用于通过 DataStage SDK 编写和编辑批处理 Flow 的技能,面向需要精细控制引擎阶段及属性的场景。它提供阶段和属性查询方法,并规定如何基于现有 Flow 代码安全地修改和提交。
主要功能
- 01通过 SDK 创建或原位更新 Flow
- 02查询阶段建议与属性取值
- 03基于检索到的完整代码编辑
- 04处理编译错误并在原 Flow 上修复
- 05支持参数化 Flow 的绑定检查
适用场景
- 01修改现有 Flow 的表达式或阶段属性
- 02添加 SDK 或 pyflow 难以表达的细节
- 03检查阶段属性和允许的取值
- 04修复提交后返回编译错误的 Flow
MCP 相关
该技能描述通过 `update_datastage_flow`、`create_datastage_flow` 等工具提交 Flow,并使用阶段推荐和属性查询工具获取信息。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ibm/ ibm-watsonx-data-integration-skills --skill di-agent-flow-datastage安装后在 Claude Code 中输入/di-agent-flow-datastage确认已加载。
附带文件references/sdk-conventions.md
详细介绍
使用 SDK 编写和编辑 DataStage 流
路由由其他文件负责。 请求应在此处还是在 pyflow 中编写,以及应该创建还是编辑,都由
di-agent-flow-lifecycle技能(AUTHOR 状态)决定。本文是 SDK 参考文档,介绍其使用方式。在处理流之前,必须全面了解di-agent-flow-lifecycle技能。加载生命周期技能之前,不要编写任何 SDK 代码。
DataStage 批处理流以 SDK 风格的 Python 代码编写,并通过 update_datastage_flow(就地编辑现有流)或 create_datastage_flow(创建新流)提交。身份验证、项目上下文和持久化均由系统自动处理。
SDK 可以访问引擎的全部阶段目录,包括 pyflow 没有表单的所有阶段。这种覆盖能力也有代价:它需要准确的阶段类型、属性名称和枚举值,因此路由器将其视为备用方案,而不是默认选择。
这两个工具都会在调用过程中编译流。 如果编译失败,结果会返回 status: "compile_error",并包含 flow_id、flow_link 和逐阶段的 compile_errors 列表——流仍会保存。使用同一个 flow_id 调用 update_datastage_flow 修复。绝不要创建新流,也不要删除有问题的流;编辑时要使用该 ID。
查阅位置
- SDK 约定(方法签名、阶段配置、链接架构、列类型、连接绑定、键规则、完整示例)→ references/sdk-conventions.md
- 阶段选择 →
recommend_datastage_stages(subutterances=[...]) - 阶段属性名称和可接受的值 →
datastage_property_lookup(requests=[{"stage": "..."}]) - 各阶段深入说明 →
di-agent-knowledge-engine-datastage技能 stages/ - 流优化 →
di-agent-knowledge-engine-datastage技能 optimization/overview.md - 自定义阶段(C/C++、Java) → BuildopStage.md、JavaIntegrationStage.md
- Transformer 阶段表达式 →
di-agent-knowledge-engine-datastage技能资源stages/TransformerStageFunctions/TransformerStageFunctionsOverview.md
编辑
编辑现有流程: 如果更改仅涉及现有结构中的表达式或阶段属性,那么原位编辑 SDK 是合适的做法——使用 retrieve_datastage_flow_code 获取流程,修改该 SDK,然后通过 update_datastage_flow 重新提交。你是在调整已经验证且连线完成的代码,因此这种做法可靠、无损且成本低。
编辑获取到的代码——绝不要手写片段。 提交给
update_datastage_flow的内容必须是retrieve_datastage_flow_code返回的完整 SDK,并在其中插入你的修改,而不是一个独立代码片段。你引用的每个阶段、连线和架构都必须在同一次提交中先定义为变量(获取到的代码已经定义了它们——derive_seg、veh_in、fp等,因此请复用这些变量名)。扁平化 SDK 语法无法获取现有元素:flow.links["x"]、flow.stages["y"]和link.schema都会被拒绝,并报错“Unsupported statement type”/“variable does not exist”。要向现有连线添加列,请在获取到的代码中修改该连线现有的create_schema()/add_field(...)行;要添加结构,请追加引用已定义变量的flow.add_stage(...)/stage.connect_output_to(...)/link.create_schema()语句。如果提交未通过验证,请修正并重新提交整段代码;不要重新获取元素,也不要从头重新编写。
如果更改涉及添加或修改结构——例如新数据源、联接或不同形状——不要在这里从头手写;这是 SDK 最不可靠的路径。请先在 pyflow(di-agent-flow-pyflow)中搭建新结构,然后在这里精确编辑生成的 SDK,添加 pyflow 无法表达的内容。如果核心形状无法通过 pyflow 忠实表达,请先用 pyflow 搭建最接近的形状,再通过 update_datastage_flow 在这里调整。
版本管理和备份由生命周期路由器的 RECOVER 状态(di-agent-flow-lifecycle/references/recover.md)负责。简而言之:update_datastage_flow 会在覆盖流程前自动创建快照——你不需要先调用 duplicate_asset,否则只会留下一个多余的副本。每个流程最多保留 5 个快照(永远不会删除最旧的快照);默认情况下,list_datastage_flows 不会列出这些快照;删除流程时也会一并删除它们。
防护措施
- 通过
flow_id获取流程——retrieve_datastage_flow_code也接受flow_name,但这种方式会直接采用名称搜索的第一个匹配项,不会检查名称是否唯一,因此名称有歧义时会悄无声息地返回其他流程的代码 - 绝不要猜测阶段类型、属性名称或枚举值——请使用
recommend_datastage_stages/datastage_property_lookup - 将所有更改打包在一次提交中——连续提交会相互覆盖
update_datastage_flow从不创建流程——如果指定的流程不存在,它会报错;请通过list_datastage_flows验证名称。要创建流程,请使用create_datastage_flow(或 pyflow)——具体选择请参阅生命周期路由器- 更新成功后,将工具结果中返回的
flow_link作为可点击链接显示,方便用户在界面中打开流程 - 正文中提及阶段属性名称时——使用
datastage_property_lookup中的User friendly name(例如“Number of rows (per partition)”),而不是内部标识符(nrecs);仅在代码块中或用户询问 SDK 属性时显示内部名称 - 参数化流程:
update_datastage_flow会在重建流程前加载现有流程,因此通过 SDK 编辑时会保留参数集注册和本地参数。如果作业在编辑后意外丢失参数绑定,请调用get_flow_parameter_references检查已注册的内容,并使用attach_parameter_set_to_flow/add_local_parameter恢复缺失的条目。