Дублирование задания в интеграции данных Pentaho для различных соединений
Я создал задание через Скопировать Таблицу мастер в Spoon UI, который копирует некоторые таблицы из источника базы данных oracle на SQL Server, а также внес некоторые изменения в задание.
теперь я хочу дублировать ту же работу (те же таблицы и те же изменения), но изменяя только соединения. Возможно ли это в Spoon ?
Я просмотрел пользовательский интерфейс Spoon и не нашел никакой опции, которая позволяет мне дублировать работу с изменением соединения.
редактировать
После того, как я создал два шага: один для генерации строк, а другой для запутывания паролей, в encrypted
поле, я не получаю "зашифрованный : запутанный пароль", как ожидалось
вот как выглядит шаг генерации строк:
и вот другое изображение для измененного значения сценария Java :
4 ответов
вам нужно сделать копию вашего . Задания и преобразования фактически являются XML-файлами. Затем вы можете отредактировать его вручную.
Это довольно прямолинейно, с <connection>
теги, поэтому вы должны быть в состоянии понять все это самостоятельно.
Я считаю, что это самый быстрый способ, если вы хотите сохранить два задания вместо изменения учетных данных подключения к БД каждый раз.
Если вам нужно предоставить запутанный пароль (они не зашифрованы, просто запутаны) вы можете создать преобразование, которое будет запутывать его для вас, предоставляя вам значение для.
шаги для воспроизведения создания преобразования для запутывания паролей в Kettle 6.1 (для более старых версий имя Значения Скриптов / Mod шаг Изменено Значение Скрипта Java):
- шаг создать строки только с 1 строкой хранения пароля в качестве значения
- шаг Значения Сценарий / Mod для основной запутанности
есть пример в $KETTLE_HOME / samples/transformation / job-executor. Передать параметры соединения в подзадачу
плохо, что u не может передать имя драйвера 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>
Ах, я верю, что вы можете это сделать, но я еще не сделал этого сам. Нет необходимости. Но я считаю, что вы можете использовать общие объекты, чтобы получить такую функциональность, которую вы хотите, и просто иметь одно (гораздо проще поддерживать) преобразование. Вот ссылка на форум, где это обсуждается.
Дайте мне знать, как это работает. Хорошенький любопытный.