Modified JavaScript步骤输出字段为空,如何传递字符串至后续步骤?
问题原因及解决方法
核心原因
- 数据流字段未配置映射:Modified JS步骤的测试脚本仅验证代码逻辑中的变量值,但如果未将变量映射为输出字段,数据流不会携带这些值到后续步骤,导致预览/运行时字段为空。
- 变量作用域不匹配:元数据注入步骤通常读取的是Kettle全局环境变量,而非数据流字段;若你仅在JS中定义局部变量或未配置的数据流字段,元数据注入无法直接读取。
针对性解决方法
场景1:传递为数据流字段(若后续步骤需通过数据流接收)
- 打开Modified JS步骤,切换到**「字段」标签页**
- 点击「添加」,依次配置3个输出字段:
- 字段名称:自定义(如
str_var1) - JavaScript:填写你赋值的变量名(如
my_str1) - 数据类型:选择
String
- 字段名称:自定义(如
- JS代码示例:
var my_str1 = "目标字符串1"; var my_str2 = "目标字符串2"; var my_str3 = "目标字符串3"; - 配置完成后,再次预览转换,数据流中会包含这3个字段及对应值。
场景2:传递为Kettle环境变量(适配元数据注入步骤)
元数据注入步骤依赖Kettle全局环境变量,需用Kettle API直接设置:
- Modified JS步骤的代码修改为:
// 第三个参数"Y"表示全局生效,作业/后续步骤均可读取 setVariable("STR_VAR1", "目标字符串1", "Y"); setVariable("STR_VAR2", "目标字符串2", "Y"); setVariable("STR_VAR3", "目标字符串3", "Y"); - 无需配置「字段」标签页的输出映射
- 在元数据注入步骤中,直接用
${STR_VAR1}格式引用变量即可
排查注意事项
- 检查变量名拼写:JS中的变量名和输出字段/环境变量名必须完全一致
- 确认步骤执行顺序:Modified JS步骤需在元数据注入步骤之前执行
- 环境变量测试:可在JS脚本末尾添加
print(getVariable("STR_VAR1"));,运行脚本时查看控制台输出验证是否设置成功
内容的提问来源于stack exchange,提问作者user22409127
相关产品推荐
相关产品推荐

