Pentaho动态数据库连接类型

时间:2018-10-23 11:23:46

标签: dynamic kettle

我切换到的产品正在使用Pentaho为仪表板创建数据库。 它应该同时支持Oracle和MSSQL。它使用JNDI访问。同样,两种数据库类型都使用相同的pentaho文件(作业,转换)。最近,我们在生产中遇到一个错误,说该日志在清理阶段表上增长过快,并且实际上执行删除操作并没有像现在所认为的那样截断。

我已经使用pdi源代码执行了调试,并且发现这是由于以下事实引起的:由于我们支持2种db类型,因此源db连接的类型为Generic。对于通用数据库连接,getTruncateTableStatement()实际上返回delete而不是truncate。

我的潜在客户告诉我,是否有一种干净的方法可以在运行时或至少在安装时更改此值。所以,我在这里:)

是否有一种方法可以动态更改此属性(连接类型),以便基于DatabaseType从配置文件将其更改为对应的属性(Oracle或MSSQL)?

P.S。我们使用pentaho 6.1.0.1

3 个答案:

答案 0 :(得分:0)

如果使用JNDI连接,则该连接在文件your-data-integration-server/simple-jndi/jdbc.properties中定义。

编辑此文件并定义数据库类型,这是通过定义your-connection/driver来隐式完成的。

答案 1 :(得分:0)

如果使用JDBC连接,则没有定义数据库类型的(简单)方法(因为不同数据库类型的连接参数不同)。

您可以做的是: enter image description here

但是,您不能在参数中定义哪个是活动连接,因为建立连接将是水壶的第一件事。

答案 2 :(得分:0)

清洁表不应由转换负责。我知道这很容易,但是由于删除外键,您很快就会输入错误或过多的级联时间。

您尚未在这个问题上迷失方向,因为临时表通常没有外键。但这不是因为看不见问题而不存在。

清除临时表的干净方法是使用作业级SQL脚本(截断顺序)截断表。当然,此步骤适用于Oracle和MSSQL,因为truncate语句是标准SQL。

如果您有很多表(并且这些表可能使用命名约定来标识),则可以编写一个小的转换,该转换将获取表名称,编写SQL截断并在另一个表之后执行该语句。不幸的是,您将无法控制表被截断的顺序。