Тип подключения динамической базы данных Pentaho - PullRequest
0 голосов
/ 23 октября 2018

Продукт, на который я переключился, использует Pentaho для создания БД для Dashboards.Он должен поддерживать как Oracle, так и MSSQL.Он использует доступ JNDI.Кроме того, одни и те же файлы Pentaho (задания, преобразования) используются для обоих типов БД.Недавно мы получили сообщение о том, что журналы растут слишком быстро при очистке таблиц этапов и что на самом деле выполняется удаление, а не усечение, как считалось до сих пор.

Я выполнил отладку с использованием исходного кода pdi и обнаружил, что это вызвано тем фактом, что, поскольку мы поддерживаем типы 2 дБ, исходное соединение дБ имеет тип Generic.Для общего соединения БД getTruncateTableStatement() фактически возвращает удаление вместо усечения.

Мой ведущий сказал мне Google, если есть чистый способ изменить это значение во время выполнения или, по крайней мере, во время установки.Итак, вот я:)

Есть ли способ динамически изменить это свойство ( Тип соединения ), чтобы на основании DatabaseType из файла конфигурации оно было изменено на соответствующееодин (Oracle или MSSQL)?

PS Используем pentaho 6.1.0.1

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Если вы используете соединение JDBC, не существует (простого) способа определения типа базы данных (поскольку параметры соединения не одинаковы для разных типов баз данных).

Что вы можете сделать: enter image description here

Однако вы не можете определить, какое соединение является активным в параметре, потому что установление соединения будет первым, что сделает чайник.

0 голосов
/ 23 октября 2018

Чистка столов не должна быть ответственностью преобразований.Я знаю, что это легко, но вы скоро вводите ошибки или чрезмерное время каскада из-за удаления внешних ключей.

Вы еще не сталкивались с этой проблемой, поскольку в промежуточных таблицах обычно нет внешних ключей.Но это не потому, что проблема невидима, что она не существует.

Чистый способ очистки промежуточных таблиц состоит в том, чтобы обрезать таблицы до этого с помощью SQL-скрипта уровня задания (порядок усечения имеет значение). Конечно, этот шаг будет работать как в Oracle, так и в Oracle.MSSQL, поскольку оператор усечения является стандартным SQL.

Если у вас много таблиц (и эти таблицы могут быть идентифицированы в соответствии с соглашением об именах), вы можете написать небольшое преобразование, которое получит имена таблиц, напишитеусечение SQL и выполнение оператора в таблице за другим.К сожалению, вы не сможете контролировать порядок усечения таблиц.

0 голосов
/ 23 октября 2018

Если вы используете соединение JNDI, соединение определяется в файле your-data-integration-server/simple-jndi/jdbc.properties.

Отредактируйте этот файл и определите тип базы данных, что неявно выполняется путем определения your-connection/driver.

...