在 Pentaho Data Integration 中为不同的连接复制一个作业
Duplicating a job in Pentaho Data Integration for different connections
我通过 Spoon UI 中的 复制表 向导生成了一个作业,它将一些表从 oracle 数据库源复制到 SQL服务器一,也对工作进行了一些更改。
现在我想复制相同的作业(相同的表和相同的更改),但只更改连接。这在 Spoon 中可能吗?
我查看了 Spoon UI,但没有找到任何让我通过更改连接来复制作业的选项。
编辑
在我创建了两个步骤之后:一个用于生成行,另一个用于混淆密码,在 encrypted
字段中,我没有得到预期的 'Encrypted : Obfusctaed Password' 输出
这是步骤生成行的样子:
这是修改后的 Java 脚本值的另一张图片:
$KETTLE_HOME/samples/transformation/job-executor中有示例。
将连接参数传递给子作业
糟糕的是你不能传递 jdbc 驱动程序名称,所以它们必须是具有不同连接设置的相同类型的数据库
无法直接从 Pentaho 执行您想要的操作,一种选择是直接更改转换的 XML 以更改连接。所以思路如下:
- 弄清楚连接的 XML 会是什么样子。就为了这
注册一个新连接,在你的转换中的某个地方使用它
并观看 XML 元素的源代码
.........
- 制作您的转换的物理副本
- 替换 XML 文件中的连接定义和引用。为此,您可以像这样使用 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- This template will replace the connection definition -->
<xsl:template match="connection[./name='SOURCE_CONNECTION_NAME']">
<!-- This is the connection configuration -->
<connection>
<name>TARGET_CONNECTION_NAME</name>
<server>localhost</server>
<type>ORACLE</type>
<access>Native</access>
<database><!-- DB NAME --> </database>
<port>1521</port>
<username><!-- USERNAME --> </username>
<password><!-- PWD --></password>
<servername/>
<data_tablespace><!-- --></data_tablespace>
<index_tablespace/>
<attributes>
<attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
<attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
<attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
<attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
<attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>Y</attribute></attribute>
<attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
<attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
<attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
<attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
</attributes>
</connection>
</xsl:template>
<!-- And that one will replace the connection's reference in table input/table output -->
<xsl:template match="connection[text()='SOURCE_CONNECTION_NAME']">
<connection>TARGET_CONNECTION_NAME</connection>
</xsl:template>
</xsl:stylesheet>
您需要复制 kjb
文件。作业和转换实际上是 XML 文件。然后您可以手动编辑它。
这非常简单,带有 <connection>
标签,因此您应该能够自己弄清楚。
如果您想保留两个作业而不是每次都更改数据库连接凭据,我发现这是最快的方法。
如果您需要提供混淆密码(它们未加密,只是混淆),您可以创建一个转换,为您混淆密码,为您提供要放入 XML
文件的值。
重现在 Kettle 6.1 中创建混淆密码转换的步骤(对于旧版本,脚本值/Mod 步骤的名称是 Mod已修改 Java 脚本值):
- 步骤 生成行,其中仅 1 行将密码存储为值
- 步骤 脚本值/Mod 用于基本混淆
啊,我相信你可以做到,但我自己还没有做到。不需要。但我相信您可以使用共享对象来获得您想要的这种功能,并且只进行一次(更容易维护)转换。这是讨论它的论坛 link。
告诉我结果如何。很好奇。
我通过 Spoon UI 中的 复制表 向导生成了一个作业,它将一些表从 oracle 数据库源复制到 SQL服务器一,也对工作进行了一些更改。
现在我想复制相同的作业(相同的表和相同的更改),但只更改连接。这在 Spoon 中可能吗?
我查看了 Spoon UI,但没有找到任何让我通过更改连接来复制作业的选项。
编辑
在我创建了两个步骤之后:一个用于生成行,另一个用于混淆密码,在 encrypted
字段中,我没有得到预期的 'Encrypted : Obfusctaed Password' 输出
这是步骤生成行的样子:
这是修改后的 Java 脚本值的另一张图片:
$KETTLE_HOME/samples/transformation/job-executor中有示例。 将连接参数传递给子作业
糟糕的是你不能传递 jdbc 驱动程序名称,所以它们必须是具有不同连接设置的相同类型的数据库
无法直接从 Pentaho 执行您想要的操作,一种选择是直接更改转换的 XML 以更改连接。所以思路如下:
- 弄清楚连接的 XML 会是什么样子。就为了这 注册一个新连接,在你的转换中的某个地方使用它 并观看 XML 元素的源代码 .........
- 制作您的转换的物理副本
- 替换 XML 文件中的连接定义和引用。为此,您可以像这样使用 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- This template will replace the connection definition -->
<xsl:template match="connection[./name='SOURCE_CONNECTION_NAME']">
<!-- This is the connection configuration -->
<connection>
<name>TARGET_CONNECTION_NAME</name>
<server>localhost</server>
<type>ORACLE</type>
<access>Native</access>
<database><!-- DB NAME --> </database>
<port>1521</port>
<username><!-- USERNAME --> </username>
<password><!-- PWD --></password>
<servername/>
<data_tablespace><!-- --></data_tablespace>
<index_tablespace/>
<attributes>
<attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
<attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
<attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
<attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
<attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>Y</attribute></attribute>
<attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
<attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
<attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
<attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
</attributes>
</connection>
</xsl:template>
<!-- And that one will replace the connection's reference in table input/table output -->
<xsl:template match="connection[text()='SOURCE_CONNECTION_NAME']">
<connection>TARGET_CONNECTION_NAME</connection>
</xsl:template>
</xsl:stylesheet>
您需要复制 kjb
文件。作业和转换实际上是 XML 文件。然后您可以手动编辑它。
这非常简单,带有 <connection>
标签,因此您应该能够自己弄清楚。
如果您想保留两个作业而不是每次都更改数据库连接凭据,我发现这是最快的方法。
如果您需要提供混淆密码(它们未加密,只是混淆),您可以创建一个转换,为您混淆密码,为您提供要放入 XML
文件的值。
重现在 Kettle 6.1 中创建混淆密码转换的步骤(对于旧版本,脚本值/Mod 步骤的名称是 Mod已修改 Java 脚本值):
- 步骤 生成行,其中仅 1 行将密码存储为值
- 步骤 脚本值/Mod 用于基本混淆
啊,我相信你可以做到,但我自己还没有做到。不需要。但我相信您可以使用共享对象来获得您想要的这种功能,并且只进行一次(更容易维护)转换。这是讨论它的论坛 link。
告诉我结果如何。很好奇。