【问题标题】:Pentaho Error: Duplicate entry for non primary keyPentaho 错误:非主键的重复条目
【发布时间】:2017-08-16 08:31:57
【问题描述】:

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

017/08/16 15:13:02 - 表 output.0 - 连接到数据库 [localhost] (commit=1000) 2017/08/16 15:13:02 - 表 output.0 - 错误(版本 7.1.0.0-12,buildguy 从 2017-05-16 17.18.02 构建 1):由于错误,此步骤不能继续: 2017/08/16 15:13:02 - 表 output.0 - 错误(版本 7.1.0.0-12,buildguy 从 2017-05-16 17.18.02 构建 1):org.pentaho.di.core.exception。水壶异常: 2017/08/16 15:13:02 - 表 output.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 - 表 output.0 - 插入/更新行时出错 2017/08/16 15:13:02 - 表 output.0 - 键“index_dashboard_domains_on_domain”的重复条目“sonar.id” 2017/08/16 15:13:02 - 表输出.0 - 2017/08/16 15:13:02 - 表输出.0 - 2017/08/16 15:13:02 - 表 output.0 - 在 org.pentaho.di.trans.steps.tableoutput.TableOutput.writeToTable(TableOutput.java:385) 2017/08/16 15:13:02 - 表 output.0 - 在 org.pentaho.di.trans.steps.tableoutput.TableOutput.processRow(TableOutput.java:125) 2017/08/16 15:13:02 - 表 output.0 - 在 org.pentaho.di.trans.step.RunThread.run(RunThread.java:62) 2017/08/16 15:13:02 - 表 output.0 - 在 java.lang.Thread.run(Thread.java:748) 2017/08/16 15:13:02 - 表 output.0 - 由:org.pentaho.di.core.exception.KettleDatabaseException 引起: 2017/08/16 15:13:02 - 表 output.0 - 插入/更新行时出错 2017/08/16 15:13:02 - 表 output.0 - 键“index_dashboard_domains_on_domain”的重复条目“sonar.id” 2017/08/16 15:13:02 - 表输出.0 - 2017/08/16 15:13:02 - 表 output.0 - 在 org.pentaho.di.core.database.Database.insertRow(Database.java:1321) 2017/08/16 15:13:02 - 表 output.0 - 在 org.pentaho.di.trans.steps.tableoutput.TableOutput.writeToTable(TableOutput.java:262) 2017/08/16 15:13:02 - 表 output.0 - ... 3 更多 2017/08/16 15:13:02 - 表 output.0 - 原因:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:键 'index_dashboard_domains_on_domain' 的重复条目 'sonar.id' 2017/08/16 15:13:02 - 表 output.0 - 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 2017/08/16 15:13:02 - 表 output.0 - 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 2017/08/16 15:13:02 - 表 output.0 - 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 2017/08/16 15:13:02 - 表 output.0 - 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 2017/08/16 15:13:02 - 表 output.0 - 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 2017/08/16 15:13:02 - 表 output.0 - 在 com.mysql.jdbc.Util.getInstance(Util.java:408) 2017/08/16 15:13:02 - 表 output.0 - 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935) 2017/08/16 15:13:02 - 表 output.0 - 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) 2017/08/16 15:13:02 - 表 output.0 - 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) 2017/08/16 15:13:02 - 表 output.0 - 在 com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) 2017/08/16 15:13:02 - 表 output.0 - 在 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680) 2017/08/16 15:13:02 - 表 output.0 - 在 com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2494) 2017/08/16 15:13:02 - 表 output.0 - 在 com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) 2017/08/16 15:13:02 - 表 output.0 - 在 com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079) 2017/08/16 15:13:02 - 表 output.0 - 在 com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013) 2017/08/16 15:13:02 - 表 output.0 - 在 com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104) 2017/08/16 15:13:02 - 表 output.0 - 在 com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998) 2017/08/16 15:13:02 - 表 output.0 - 在 org.pentaho.di.core.database.Database.insertRow(Database.java:1288) 2017/08/16 15:13:02 - 表 output.0 - ... 4 更多 2017/08/16 15:13:02 - Table output.0 - 完成处理(I=0, O=0, R=1, W=0, U=0, E=1)

上面写着:

插入/更新行 2017/08/16 15:13:02 时出错 - 表 output.0 - 键 'index_dashboard_domains_on_domain' 的重复条目 'sonar.id' 2017/08/16 15:13:02 - 表输出。 0 - 2017/08/16 15:13:02 - 表 output.0 - 2017/08/16 15:13:02 - 表 output.0 - 在 org.pentaho.di.trans.steps.tableoutput.TableOutput.writeToTable (TableOutput.java:385)

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

【问题讨论】:

    标签: mysql pentaho kettle pentaho-spoon


    【解决方案1】:

    它试图完全按照它告诉你的去做:插入一个具有重复 ID 的键。

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

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

    第三种解决方案是使用CRUD 进行增量加载。该步骤名为Joins/Merge Row (diff)。您指定参考(现有)数据和新传入数据,以及要比较的键。然后,Kettle 创建一个包含“新”、“已删除”、“相同”或“更新”的新字段,您可以从中仅过滤掉新数据。

    【讨论】:

      猜你喜欢
      • 2019-02-23
      • 2018-05-01
      • 2017-02-17
      • 2016-02-10
      • 2015-04-10
      • 1970-01-01
      • 2015-07-13
      • 2012-08-18
      • 1970-01-01
      相关资源
      最近更新 更多