Pentaho错误:非主键

时间:2017-08-16 08:31:57

标签: mysql pentaho kettle pentaho-spoon

大家好我是pentaho的新用户,使用pentaho kettle version 7.1mysql jdbc driver版本是5.1.43。我在不同的数据库中有两个相同的表。我们称之为db1的是第一个在生产中托管的数据库,而db2是另一个在开发中托管的数据库。 db1db2都有相同的表格dashboard_user。表dashboard_user的主键idautoincrement。但问题是,当我尝试将值从生产复制到开发而不删除开发中的现有数据时,它返回如下:

  

017/08/16 15:13:02 - 表输出0 - 连接到数据库[localhost](commit = 1000)   2017/08/16 15:13:02 - 表输出0 - 错误(版本7.1.0.0-12,版本1来自2017-05-16 17.18.02 by buildguy):由于错误,此步骤可以&#39 ; t继续:   2017/08/16 15:13:02 - 表输出0 - 错误(版本7.1.0.0-12,版本1来自2017-05-16 17.18.02 by buildguy):org.pentaho.di.core.exception。 KettleException:   2017/08/16 15:13:02 - 表格输出0 - 在表格[dashboard.domains]中插入行时出错:[sonar.id],[2016/07/17 07:27:31.000000000],[2017/07 / 25 08:08:26.000000000]   2017/08/16 15:13:02 - 表输出0 -   2017/08/16 15:13:02 - 表输出0 - 插入/更新行时出错   2017/08/16 15:13:02 - 表输出0 - 重复输入' sonar.id'对于密钥" index_dashboard_domains_on_domain'   2017/08/16 15:13:02 - 表输出0 -   2017/08/16 15:13:02 - 表输出0 -   2017/08/16 15:13:02 - 表输出0 - 在org.pentaho.di.trans.steps.tableoutput.TableOutput.writeToTable(TableOutput.java:385)   2017/08/16 15:13:02 - 表输出0 - 在org.pentaho.di.trans.steps.tableoutput.TableOutput.processRow(TableOutput.java:125)   2017/08/16 15:13:02 - 表输出0 - 在org.pentaho.di.trans.step.RunThread.run(RunThread.java:62)   2017/08/16 15:13:02 - 表输出0 - 在java.lang.Thread.run(Thread.java:748)   2017/08/16 15:13:02 - 表输出0 - 引起:org.pentaho.di.core.exception.KettleDatabaseException:   2017/08/16 15:13:02 - 表输出0 - 插入/更新行时出错   2017/08/16 15:13:02 - 表输出0 - 重复输入' sonar.id'对于密钥" index_dashboard_domains_on_domain'   2017/08/16 15:13:02 - 表输出0 -   2017/08/16 15:13:02 - 表输出0 - 在org.pentaho.di.core.database.Database.insertRow(Database.java:1321)   2017/08/16 15:13:02 - 表输出0 - 在org.pentaho.di.trans.steps.tableoutput.TableOutput.writeToTable(TableOutput.java:262)   2017/08/16 15:13:02 - 表输出0 - ......还有3个   2017/08/16 15:13:02 - 表输出0 - 引起:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:重复条目' sonar.id'对于密钥" index_dashboard_domains_on_domain'   2017/08/16 15:13:02 - 表输出0 - 在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)   2017/08/16 15:13:02 - 表输出0 - 在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)   2017/08/16 15:13:02 - 表输出0 - 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)   2017/08/16 15:13:02 - 表输出0 - 在java.lang.reflect.Constructor.newInstance(Constructor.java:423)   2017/08/16 15:13:02 - 表输出0 - 在com.mysql.jdbc.Util.handleNewInstance(Util.java:425)   2017/08/16 15:13:02 - 表输出0 - 在com.mysql.jdbc.Util.getInstance(Util.java:408)   2017/08/16 15:13:02 - 表输出0 - 在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)   2017/08/16 15:13:02 - 表输出0 - 在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)   2017/08/16 15:13:02 - 表输出0 - 在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)   2017/08/16 15:13:02 - 表输出0 - 在com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)   2017/08/16 15:13:02 - 表输出0 - 在com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)   2017/08/16 15:13:02 - 表输出0 - 在com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2494)   2017/08/16 15:13:02 - 表输出0 - 在com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)   2017/08/16 15:13:02 - 表输出0 - 在com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079)   2017/08/16 15:13:02 - 表输出0 - 在com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013)   2017/08/16 15:13:02 - 表输出0 - at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104)   2017/08/16 15:13:02 - 表输出0 - 在com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998)   2017/08/16 15:13:02 - 表输出0 - 在org.pentaho.di.core.database.Database.insertRow(Database.java:1288)   2017/08/16 15:13:02 - 表输出0 - ......还有4个   2017/08/16 15:13:02 - 表输出0 - 完成处理(I = 0,O = 0,R = 1,W = 0,U = 0,E = 1)

它说:

  

插入/更新行2017/08/16 15:13:02时出错 - 表输出0 - 重复输入' sonar.id'对于密钥" index_dashboard_domains_on_domain' 2017/08/16 15:13:02 - 表输出0 - 2017/08/16 15:13:02 - 表输出0 - 2017/08/16 15:13:02 - 表输出0 - 在组织.pentaho.di.trans.steps.tableoutput.TableOutput.writeToTable(TableOutput.java:385)

sonar.id是用户名而不是主键,我想知道为什么我无法传输数据?但返回错误,说重复键?

1 个答案:

答案 0 :(得分:0)

它试图完全按照它告诉你的方式:插入一个带有重复ID的密钥。

第一种解决方案是在再次插入记录之前删除(截断)输出表。

第二个解决方案是使用带有错误处理程序的Output table:放置Dummy步骤并在定义跳/箭时选择错误处理。此步骤将收到所有错误,包括重复错误。

第三种解决方案是使用CRUD进行增量加载。该步骤名为Joins/Merge Row (diff)。您可以指定引用(现有)数据和新传入数据,以及要比较的密钥。然后,Kettle会创建一个新字段,其中包含' new','已删除'相同'或者'更新'您可以从中筛选出新数据。

enter image description here