我切换到的产品正在使用Pentaho为仪表板创建数据库。 它应该同时支持Oracle和MSSQL。它使用JNDI访问。同样,两种数据库类型都使用相同的pentaho文件(作业,转换)。最近,我们在生产中遇到一个错误,说该日志在清理阶段表上增长过快,并且实际上执行删除操作并没有像现在所认为的那样截断。
我已经使用pdi源代码执行了调试,并且发现这是由于以下事实引起的:由于我们支持2种db类型,因此源db连接的类型为Generic。对于通用数据库连接,getTruncateTableStatement()
实际上返回delete而不是truncate。
我的潜在客户告诉我,是否有一种干净的方法可以在运行时或至少在安装时更改此值。所以,我在这里:)
是否有一种方法可以动态更改此属性(连接类型),以便基于DatabaseType从配置文件将其更改为对应的属性(Oracle或MSSQL)?
P.S。我们使用pentaho 6.1.0.1
答案 0 :(得分:0)
如果使用JNDI连接,则该连接在文件your-data-integration-server/simple-jndi/jdbc.properties
中定义。
编辑此文件并定义数据库类型,这是通过定义your-connection/driver
来隐式完成的。
答案 1 :(得分:0)
答案 2 :(得分:0)
清洁表不应由转换负责。我知道这很容易,但是由于删除外键,您很快就会输入错误或过多的级联时间。
您尚未在这个问题上迷失方向,因为临时表通常没有外键。但这不是因为看不见问题而不存在。
清除临时表的干净方法是使用作业级SQL脚本(截断顺序)截断表。当然,此步骤适用于Oracle和MSSQL,因为truncate语句是标准SQL。
如果您有很多表(并且这些表可能使用命名约定来标识),则可以编写一个小的转换,该转换将获取表名称,编写SQL截断并在另一个表之后执行该语句。不幸的是,您将无法控制表被截断的顺序。