标签: kettle

使用Pentaho Kettle,如何在保持参照完整性的同时从单个表中加载多个表?

需要将具有100,000多条记录的单个文件中的数据加载到MySQL上的多个表中,以维护文件/表中定义的关系; 意味着关系已经匹配.该解决方案应该适用于最新版本的MySQL,并且需要使用InnoDB引擎; MyISAM不支持外键.

我是一个全新的使用Pentaho数据集成(aka Kettle),任何指针将不胜感激.

我可能会补充说,要求不禁用外键约束.由于我的理解是,如果数据库的引用完整性存在问题,MySQL将不会在重新打开外键约束时检查引用完整性.消息来源: 5.1.4.服务器系统变量 - foreign_key_checks

如果插入失败,或者无法保持参照完整性,则所有方法都应包括验证和回滚策略中的一些.

再次,对此全新,并尽力提供尽可能多的信息,如果您有任何问题或要求澄清 - 请告诉我.

如果您能够从超级的kjb和ktr文件(作业/转换)发布XML.甚至可能追捕你在任何地方所做的每一条评论/答案,然后投票给他们...... :-) ......真的,找到答案对我来说真的很重要.

谢谢!


示例数据:为了更好地举例说明,我们假设我正在尝试加载一个包含员工姓名的文件,他们过去占用的办公室以及用标签分隔的职位名称历史记录.

文件:

EmployeeName<tab>OfficeHistory<tab>JobLevelHistory
John Smith<tab>501<tab>Engineer
John Smith<tab>601<tab>Senior Engineer
John Smith<tab>701<tab>Manager
Alex Button<tab>601<tab>Senior Assistant
Alex Button<tab>454<tab>Manager
Run Code Online (Sandbox Code Playgroud)

注意:单表数据库是完全标准化的(可能只有一个表) - 例如,在"John Smith"的情况下,只有一个John Smith; 意味着没有重复会导致参照完整性的冲突.

MyOffice数据库架构有如下表:

Employee (nId, name)
Office (nId, number)
JobTitle (nId, titleName)
Employee2Office (nEmpID, nOfficeId)
Employee2JobTitle (nEmpId, nJobTitleID)
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下.表格应如下所示:

Employee
1 John Smith
2 Alex Button

Office
1 501
2 601
3 701
4 454

JobTitle
1 Engineer
2 …
Run Code Online (Sandbox Code Playgroud)

mysql etl pentaho kettle

21
推荐指数
1
解决办法
1万
查看次数

使用Pentaho Kettle,如何自动重试因连接打嗝而失败的休息请求?

我们怎样才能使Pentaho重试连接错误的休息请求?

我们有一个Pentaho BI系统,它在众多数据源中查询特定的REST api,每次运行的查询变量超过20k.

可以预见的是,在大多数运行中,由于连接打嗝,这些请求中的一些会失败.这些通常在Pentaho日志中表现为org.pentaho.di.core.exception.KettleException由于javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake最终由此引起的java.io.EOFException: SSL peer shut down incorrectly.

在浏览了互联网和Pentaho论坛之后,我们找不到任何关于在这种情况下添加简单重试方法的说明.头发被撕掉了.

帮帮我StackOverflow,你是我唯一的希望!

更新1: Stacktrace:

ERROR 29-11 11:02:17,659 - B - org.pentaho.di.core.exception.KettleException:
Can not result from [https://<DOMAIN>/<PATH>?<PARAMS>]
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake    
    at org.pentaho.di.trans.steps.rest.Rest.callRest(Rest.java:190)
    at org.pentaho.di.trans.steps.rest.Rest.processRow(Rest.java:385)
    at org.pentaho.di.trans.step.RunThread.run(RunThread.java:40)
    at java.lang.Thread.run(Thread.java:662)
Caused by: com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at com.sun.jersey.client.apache.DefaultApacheHttpMethodExecutor.executeMethod(DefaultApacheHttpMethodExecutor.java:213)
    at com.sun.jersey.client.apache.ApacheHttpClientHandler.handle(ApacheHttpClientHandler.java:175)
    at com.sun.jersey.api.client.filter.HTTPBasicAuthFilter.handle(HTTPBasicAuthFilter.java:81)
    at com.sun.jersey.api.client.Client.handle(Client.java:648)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:670)
    at com.sun.jersey.api.client.WebResource.get(WebResource.java:191)
    at org.pentaho.di.trans.steps.rest.Rest.callRest(Rest.java:141)
    ... 3 more …
Run Code Online (Sandbox Code Playgroud)

rest http pentaho kettle

19
推荐指数
1
解决办法
4138
查看次数

将DB连接参数传递给Kettle aka PDI表从Excel动态输入步骤

我有一个要求,每当我运行我的Kettle作业时,必须在每次运行时从excel源动态获取数据库连接参数.

假设我有一个带有列名的Excel:HostName,Username,Database,Password.

我想在作业运行时动态地将这些连接参数传递给我的表输入步骤.

这就是我想要做的.

在此输入图像描述

parameters excel pentaho kettle

14
推荐指数
1
解决办法
1万
查看次数

Pentaho水壶:如何为转换/工作设置测试?

我一直在使用Pentaho的壶相当长的一段时间,之前的转换和工作我做了(用勺子)已经从数据库相当简单的负载,重命名等,输入的东西到另一个数据库.但是现在我一直在进行转换,这些转换做了一些更复杂的计算,我现在想以某种方式进行测试.

所以我想做的是:

  1. 设置一些测试数据
  2. 运行转换
  3. 验证结果数据

一种选择可能是做一个测试转换的Kettle测试工作.但是由于我的转换与java项目有关,我更喜欢从jUnit运行测试.所以我考虑过做一个jUnit测试:

  1. 设置测试数据(使用dbunit)
  2. 运行转换(从命令行使用kitchen.sh)
  3. 验证结果数据(使用dbunit)

然而,这种方法将需要测试数据库(一个或多个),这并不总是可用(甲骨文等昂贵/遗留分贝的),我希望的是,如果我可以嘲笑或存根的一些测试数据传递给我的输入步骤一些如何.

关于如何测试Pentaho水壶转换的任何其他想法?

java testing junit pentaho kettle

13
推荐指数
1
解决办法
4227
查看次数

Kettle/Pentaho数据集成 - 无法创建数据库连接(XulException:java.lang.reflect.InvocationTargetException)

终于让水壶启动而不是挂起,我仍然无法使用它,因为当我尝试创建一个新的数据库连接(创建一个新的转换后)我得到这个错误:

org.pentaho.ui.xul.XulException: java.lang.reflect.InvocationTargetException
Run Code Online (Sandbox Code Playgroud)

此后,我得到了相同操作的更一般错误:

General error in dialog
Run Code Online (Sandbox Code Playgroud)

为了再次获得第一个'java ... TargetException',我必须关闭并重启水壶.
请注意,当我加载现有的水壶作业并尝试编辑其数据库连接时,也会发生这种情况.

这可能是配置问题吗?文件丢失或放错了?什么是未能被调用的目标?在此先感谢您的帮助.

我的配置:

macos 10.12.6(Sierra)
Pentaho数据集成(或水壶)7.1.0
java版"9.0.4"

java pentaho kettle

13
推荐指数
2
解决办法
5135
查看次数

Rhino ETL意见与Kettle和SSIS

我正在考虑一种ETL解决方案的工具,它具有很高的日常需求并且需要繁重的业务逻辑处理.到目前为止我已经尝试过水壶和SSIS,并且还想测试Rhino ETL.我不关心Kettle和SSIS的视觉流程结构,并且创建复杂的业务规则似乎很难使用它们...... Rhino ETL似乎更友好,因为它有自己的DSL来转换数据,我也可以使用C#.

最后,我的问题是:任何人都使用Rhino ETL吗?与Kettle和SSIS相比,它具有良好的性能?可维护性怎么样?

谢谢

更新:

在我与Kettle和SSIS之间进行的比较中,Kettle毫无疑问是更好的.我正在考虑Rhino ETL与Kettle相比的实用方法.正如评论中所说,这似乎是一个倒退,但所需的验证不是Kettle推荐的那种问题.例如,我们的一个集成接收某种必须根据系统中现有的调度进行验证,它们不能冲突,有几种类型的调度,冲突验证规则很复杂.系统已经有一个User Inteface来完成它,业务逻辑已经用C#代码实现了.任何试图将它移植到水壶的尝试似乎都非常困难,此外,它违反了"只做一件事"的原则.

评论中的"无人使用"问题对我来说也是一个问题,这就是为什么我在这里试图找出是否有人在繁重的生产环境中使用它.

感谢您的反馈到目前为止.

ssis kettle rhino-etl

11
推荐指数
1
解决办法
6345
查看次数

Maven依赖PDI(Pentaho Kettle)Jar文件

我编写了Java代码来执行我的转换和Jobs,我已经手动将data-integration/lib文件夹中存在的所有Jar文件添加到我的类路径中,并且evrything工作正常.

现在我想对我的项目进行编组并查找XML,它指定数据集成的lib目录中存在的每个jar的groupid和artifact Id.我在这里找到了链接,但它们不包含所有依赖项.

PDI版本 - 5.0.1稳定

pentaho maven kettle

11
推荐指数
2
解决办法
1万
查看次数

使用JSON输入步骤处理不均匀的数据

我正在尝试使用JSON输入步骤处理以下内容:

{"address":[
  {"AddressId":"1_1","Street":"A Street"},
  {"AddressId":"1_101","Street":"Another Street"},
  {"AddressId":"1_102","Street":"One more street", "Locality":"Buenos Aires"},
  {"AddressId":"1_102","Locality":"New York"}
]}
Run Code Online (Sandbox Code Playgroud)

然而,这似乎是不可能的:

Json Input.0 - ERROR (version 4.2.1-stable, build 15952 from 2011-10-25 15.27.10 by buildguy) : 
The data structure is not the same inside the resource! 
We found 1 values for json path [$..Locality], which is different that the number retourned for path [$..Street] (3509 values). 
We MUST have the same number of values for all paths.
Run Code Online (Sandbox Code Playgroud)

该步骤提供Ignore Missing Path标志,但只有在所有行都错过相同路径时才有效.在这种情况下,步骤按预期运行,用null填充缺失值.

这限制了这一步骤读取不均匀数据的能力,这实际上是我的优先事项之一.

我的步骤字段定义如下:

JSON输入字段定义

我错过了什么吗?这是正确的行为吗?

json pentaho data-integration kettle

9
推荐指数
1
解决办法
2万
查看次数

在Pentaho Data Integration中复制不同连接的作业

我通过Spoon UI中的Copy Tables向导生成了一个作业,它将一些表从oracle数据库源复制到SQL Server,并对作业进行了一些更改.

现在我想复制相同的工作(相同的表和相同的更改),但只更改连接.这可能在Spoon吗?

我查看了Spoon UI并没有找到任何可以让我通过更改连接来复制作业的选项.

编辑
在我创建了两个步骤之后:一个用于生成行,另一个用于混淆密码,在该encrypted字段中,我没有按预期获得"加密:Obfusctaed密码"输出

在此输入图像描述
这是步骤生成行的样子:
在此输入图像描述

这是修改的Java脚本值的另一张图片:

在此输入图像描述

etl pentaho kettle pentaho-spoon

9
推荐指数
1
解决办法
974
查看次数

JSON.parse()无法在pentaho中使用javascript

我正在尝试使用Modified Java Script Value步骤从字符串形成数组.这是我解析字符串和形成JSON对象的代码.

var info = {};
var keywords = 'Adjust course (C-6),Identify underlying factors (C-4),Isolate teacher actions (C-3_)';
if(keywords != null && keywords != ''){
keywords = keywords.replace(/,/g,'","');
keywords = '["'+keywords+'"]';
info.keywords = JSON.parse(keywords);
}
Run Code Online (Sandbox Code Playgroud)

在JSON.parse()中,它会抛出一个错误SyntaxError:在数组文字中缺少逗号.

任何人都可以帮我解析数组并存储在json对象中.

提前致谢!

javascript json pentaho kettle

7
推荐指数
1
解决办法
1593
查看次数