在 Kettle 上使用多个数据库连接运行相同的转换
Posted
技术标签:
【中文标题】在 Kettle 上使用多个数据库连接运行相同的转换【英文标题】:Run the same transformation with multiple database connections on Kettle 【发布时间】:2016-08-18 18:49:13 【问题描述】:我有很多数据库(+100),每个都有相同的结构和不同的连接。 我正在使用 Kettle 在不同的数据库中运行转换以创建数据仓库。
如何使用不同的连接自动运行相同的转换?
我已经证明了这一点 Pass DB Connection parameters to a Kettle a.k.a PDI table Input step dynamically from Excel 但它只接受 csv 中的一行。
我应该创建一个循环,还是需要创建一个脚本?
任何帮助将不胜感激。 (对不起我的英语)
【问题讨论】:
"但它只接受 csv 中的一行" - 这是什么意思?它可以 +100 行(每行包含特定数据库的连接详细信息)。在变量中设置连接详细信息并在之后运行子转换。目录中有示例 $KETTLE_HOME/example 如何使用子转换 【参考方案1】:你可以用循环来做到这一点。 但是,不要担心,使用 Pentaho 做到这一点并不难。
首先,您将使用 JOB 来创建循环:
开始 --> Transform_that_holds_parameters --> Transform_to_run_in_a_loop
您可以猜到,在每个 DB 上均等运行的转换是此流程中的最后一个。但是我们需要在那个 Job Entry 上设置两个 Advanced 标志:
对每个输入行执行? 将之前的结果复制到参数?然后我们需要使用以下结构构建我们的 Transform_that_holds_parameters:
Some_sort_of_input --> copy_rows_to_result
在这里,您必须从某个地方获取所有连接参数,无论是 Excel 文件还是另一个数据库中的表。但是,一旦您对这些数据进行分级,请确保每个要在其中运行转换的数据库都有 1 行。好吗?
将其连接到“将行复制到结果”步骤,此步骤将数据发送回我们的 JOB,如果您还记得的话,我们的下一个转换设置为“对每个输入行执行”和“将先前的结果复制到参数” .
现在,请记住该转换的最后一步的列名是什么,下一步将需要它们。
回到我们的 JOB 并转到 Transform_to_run_in_a_loop 的属性,打开参数并使用我们刚刚复制到结果中的列填写“参数”和“流列名称”列。
在您的转换中,您需要使用完全相同的名称设置相同的参数。并在您的连接设置中使用这些参数。
完成,现在您将设置所有参数的第一个转换和为您拥有的每个数据库配置运行的第二个转换。
【讨论】:
以上是关于在 Kettle 上使用多个数据库连接运行相同的转换的主要内容,如果未能解决你的问题,请参考以下文章
如何在kettle报错时终止运行的同时将错误日志输出到数据库中