我们来详细讲解一下 Kettle(现称为 Pentaho Data Integration, PDI)中的变量。变量在 PDI 中是一个非常重要且强大的功能,它允许你动态地传递值,使你的 ETL 作业和转换更加灵活和可配置。
一、Kettle (PDI) 变量的核心概念
1. 变量的作用
- 参数化配置:将硬编码在转换或作业中的值(如文件路径、数据库连接信息、日期范围、阈值等)替换为变量,使得无需修改代码即可改变其行为。
- 在作业和转换间传递数据:父作业可以设置变量,子转换或作业可以读取这些变量,实现数据流和控制流的结合。
- 环境隔离:为开发、测试、生产等不同环境使用不同的变量值(通过配置文件或命令行设置),实现“一次开发,多处运行”。
2. 变量的层级(作用域)
这是理解 PDI 变量的关键。变量的值遵循一个特定的查找顺序(由近及远):
- Root(根变量) / JVM 变量:通过
-D参数在启动时传递给 JVM 的变量,作用域最广,整个 PDI 进程都可用。例如:-Dmy.app.home=/opt/app。 - 父作业(Parent Job):在作业中通过 “设置变量” 步骤设置的变量。这些变量对其所有子对象(子作业或子转换)可见。
- Grand-parent Job(祖父作业):如果存在多层嵌套,变量会逐级向下传递。
- 当前作业(Current Job):在作业内部设置的变量。
- 当前转换(Current Transformation):在转换内部通过 “设置变量” 步骤设置的变量。其作用域仅限于该转换的后续步骤。
- 内部变量(Internal Variables):PDI 内置的变量,如
${Internal.Transformation.Filename}(当前转换文件名)、${Internal.Job.Name}(当前作业名)、${date}(系统日期)等。
重要规则:如果一个变量在多个层级被定义,PDI 会优先使用它找到的第一个值(从最接近当前上下文的作用域开始查找)。例如,如果父作业和转换都设置了同名变量
Kettle变量设置与ETL应用详解

最低0.47元/天 解锁文章
1222

被折叠的 条评论
为什么被折叠?



