我在这里阅读了很多相关主题,但似乎没有找到解决方案。这是我的情景:我有多个相同的客户数据库我使用ETL来填充这些数据库中的特殊表…
我每天都在工作中运行类似的场景。我们所做的是为每个客户端使用带有命名参数的批处理文件,这样我们就可以完全基于这些参数为不同的客户端运行相同的包KJB / KTR。
您要做的是在主作业上设置变量,这些变量在整个执行过程中使用。
至于你的问题,在连接创建选项卡中,您可以在Host和DBname中使用这些变量。就个人而言,我们在每个客户端数据库上都设置了相同的用户/ pw,因此我们不必更改这些用户/ pw作为每个连接的变量,我们只发送主机名和数据库。 命名参数 。我们还有一个固定的计划运行,它为每个数据库执行例程,为此我们使用“对每个输入行执行”类型的JOB。
使用参数!
定义连接时,您会看到一个小连接 S 在右边的蓝色钻石上签名 Database Name 输入框。这意味着,您可以输入参数,而不是拼写数据库的名称。
S
Database Name
你第一次这样做,这有点挑战。因此,即使您想直接启动./kitchen.sh来读取每个客户包含一行的文件,也要按照步骤逐步进行操作。
的 1)参数化你的转型。 强> 右键单击任意位置,选择 Properties 然后 Parameters ,填写表格:
Properties
Parameters
然后去 Database connection 定义(在左侧面板上,“视图”选项卡)和“设置”面板中:
Database connection
测试连接。如果有效,请尝试测试运行。
的 2.检查参数。 强> 当你按下 run 按钮,勺子提示一些 Run option (如果你过去选中了“不要再告诉我了”,请使用附近的下拉菜单 Run menu )。
run
Run option
Run menu
更改Cust2的参数值。并检查它是否为其他客户运行。
改变它 Value 专栏和 Default value 柱。你会在短时间内理解这种差异,目前检查两者是否兼容。
Value
Default value
的 3.在命令行中检查它。 强> 使用pan来自 命令行 。 语法应如下所示:
./pan.sh -file=your_transfo.ktr -param=HOST_NAME:cust3_host -param=DATABASE_NAME:cust3_db....
此时,你有一点点试验和错误,因为它们之间的语法 = 和 : 与OS和PDI版本有所不同。但你应该接受4-6次试验。
=
:
的 做一份工作 强> 做PDI的并行计算范例,你不能使用 Set variable 步入一个转变。你需要通过两个转换来完成一项工作:第一个读取csv文件并使用 Set variable 步。第二个是你刚刚开发和测试的转型。
Set variable
不要指望它在第一次试验中运行。某些版本的PDI存在问题,例如需要清除转换中参数的默认值。你得到了帮助 Write to log 将在调用作业的日志中写入字段的步骤。当然,您需要先将参数/变量放在一个字段中 Get variable 步。
Write to log
Get variable
的 特别是,不要从完整的客户列表开始! 强> 之前为2-3个客户设置系统。
在csv中写下客户的完整列表,然后运行。
在最终加载时创建SELECT COUNT(客户)。这很重要,因为您可能希望尽可能多地加载客户,因此即使出现故障也要继续进行。这是默认行为(在我最好的内存中),因此如果有大量客户,您可能不会注意到日志中的失败。
的 5.安装作业 强>
原则上,它只是一个 ./kitchen.sh 。
./kitchen.sh
但是,如果要自动加载,您将很难检查没有出错。所以打开转型使用了 System date (fixed) 的 Get System Info 步骤并使用客户数据写入结果。或者,您可以在主作业中获取此日期并将其与其他变量一起传递。
System date (fixed)
Get System Info
如果您担心在数据库中创建新列,请将按天加载的客户列表存储在另一个表中,存储在文件中或通过邮件发送给您。根据我的经验,这是能够回答用户声称其最大客户未在几周前未加载的用户的唯一实用方法。