在不同的相同 Kettle Jobs/Transformatioins 中使用可变数据库连接

Using variable DB Connections in different identical Kettle Jobs/Transformatioins

我在这里通读了许多相关主题,但似乎没有找到解决方案。这是我的场景:

我的计划是为每个客户创建一个数据库连接的文本文件:

cust1, HOST_NAME, DATABASE_NAME, USER_NAME, 密码 cust2, HOST_NAME, DATABASE_NAME, USER_NAME, 密码 等等...

主机将始终保持不变。

工作将每月开始,使用 linux 盒子中的 Pentaho 厨房。

因此,当我 运行 一个特定客户的作业时,我想告诉该作业使用该特定客户的数据库连接,即 Cust2。来自连接文件。

非常感谢任何帮助。 干杯,谢谢, 黑子

我运行在我的工作中每天都有类似的场景。我们所做的是为每个客户端使用带有命名参数的批处理文件,这样我们就有了相同的包 KJB/KTR 和 运行 完全基于这些参数的不同客户端。

您要做的是在主作业上设置变量,这些变量将在整个执行过程中使用。

至于你的直接问题,在连接创建选项卡中,你可以在 Host 和 DBname 中使用这些变量。就个人而言,我们在每个客户端数据库上设置了相同的 user/pw,因此我们不必更改它们或将 user/pw 作为每个连接的变量传递,我们只发送主机名和数据库 Named Parameters。我们还有一个固定的计划 运行 为每个数据库执行例程,为此我们使用 "Execute for each input row" 类型的 JOB。

使用参数!

定义连接时,您会在 Database Name 输入框右侧的蓝色菱形中看到一个小 S 标志。这意味着,您可以输入一个参数,而不是拼写数据库的名称。

第一次做,有点挑战。因此,请逐步执行该过程,即使您很想直接启动 ./kitchen.sh 来读取包含每个客户一行的文件。

1) 参数化您的转换。 右键单击任意位置,select Properties 然后 Parameters,填写 table:

  • Row1 : Col1(参数)= HOST_NAME,Col2(默认值)= Cust1 的主机名
  • Row2 : Col1 = DATABASE_NAME,Col2 = Cust1 的数据库名称
  • Row3 : Col1 = PORT_NUMBER,Col2 = Cust1 的数据库名称
  • Row4 : Col1 = USER_NAME,Col2 = Cust1 的数据库名称
  • 第 5 行:Col1 = 密码,Col2 = Cust1 的数据库名称

然后转到 Database connection 定义(在左侧面板的“查看”选项卡上)并在“设置”面板中:

  • Host name: ${HOST_NAME} -- 前加“${”后加“$”的变量名
  • 数据库名称:${DATABASE_NAME} -- 不要输入名称,按 Crtl+SPACE
  • 端口号:${PORT_NUMBER}
  • 数据库名称:${USER_NAME}
  • 数据库名称:${PASSWORD}

测试连接。如果有效,请尝试测试 运行.

2。检查参数。 当您按下 run 按钮时,Spoon 会提示输入一些 Run option(如果您过去检查过 "Don't show me anymore",请使用 Run menu 附近的下拉菜单)。

更改Cust2 的参数值。并为其他客户检查 运行s。

Value 列和 Default value 列中更改它。您很快就会明白其中的区别,现在检查它是否适用于两者。

3。在命令行中查看。 使用 command line.
中的平移 语法应如下所示:

./pan.sh -file=your_transfo.ktr -param=HOST_NAME:cust3_host -param=DATABASE_NAME:cust3_db....

在这一点上,你有一些试验和错误,因为 =: 之间的语法随着 OS 和 PDI 版本的不同而有明显的不同。但是你应该进行 4-6 次试验。

4.找工作 做为PDI的并行计算范式,不能在单个转换中使用Set variable步骤。您需要进行两次转换:第一次读取 csv 文件并使用 Set variable 步骤定义变量。第二个是您刚刚开发和测试的转换。

不要指望在第一次试验中就成功 运行。某些版本的 PDI 存在错误并且需要,例如清除转换中参数的默认值。 Write to log 步骤会帮助您在调用作业的日志中写入一个字段。当然,您需要先将 parameters/variables 放入具有 Get variable 步骤的字段中。

特别是,不要从完整的客户列表开始!之前设置系统有 2-3 个客户。

在您的 csv 中写入完整的客户列表,然后 运行。

对您的最终加载进行 SELECT COUNT(customer)。这很重要,因为您可能希望加载尽可能多的客户,因此即使在失败的情况下也要继续该过程。这是默认行为(以我最好的记忆),因此如果有大量客户,您可能不会注意到日志中的故障。

5.安装作业

原则上就是一个./kitchen.sh.

但是,如果您想自动加载,您将很难检查是否有任何问题。因此,打开转换并使用 Get System Info 步骤的 System date (fixed) 并将结果写入客户数据。或者,您可以在主作业中获取此日期并将其与其他变量一起传递。

如果您担心在数据库中创建新列,请将按天加载的客户列表存储在另一个 table 文件中或通过邮件将其发送给您。根据我的经验,这是能够回答声称他们最大的客户几周前没有加载树的用户的唯一实用方法。