【问题标题】:Handling data truncation in Talend在 Talend 中处理数据截断
【发布时间】:2014-07-31 15:45:49
【问题描述】:

我正在将数据从 Excel 工作表复制到 SQL 服务器表。 在一些工作表中,我的数据在 SQL 中的表模式的大小更大。

即表的列具有数据类型 nvarchar(50),其中我的 Excel 工作表在某些 shell 中有超过 50 个字符的数据。

现在在复制时,没有将包含此类数据的行插入到数据库中。相反,我想通过截断额外字符来插入包含此类数据的行。我该怎么做?

【问题讨论】:

  • try ignoring error in talend 应该这样做!
  • @861051069712110711711710997114 忽略错误将允许作业继续,但不会将任何批次(甚至批次中的好行)写入数据库。

标签: sql-server excel talend


【解决方案1】:

您可以使用 Java 的 substring 方法来检查字符串的长度,例如:

row1.foobar.length() > 50 ? row1.foobar.substring(0,50) : row1.foobar

这使用 Java 的 String length method 来测试它是否超过 50。如果是,那么它使用 substring method 来获取 0 到 50 之间的字符(即前 50 个字符),如果不是,那么它返回整个字符串。

如果你在 tMap 或 tJavaRow 中弹出它,那么你应该能够将字符串限制为 50 个字符(或任何你想要的调整):

如果您希望删除任何不符合您的数据库架构的行,那么您应该定义您的作业架构以匹配数据库架构,然后使用tSchemaComplianceCheck 组件过滤掉与该架构不匹配的行.

【讨论】:

  • 我会选择 SchemaComplianceCheck
  • 它有不同的用途。如果您不希望任何批次在事情太长或数据类型错误的情况下命中数据库,那么让它失败,然后重新分析您的源数据。但是,如果您希望所有好的行都进入数据库,然后分别处理剩余的行,那么 tSchemaComplianceCheck 就是要走的路。最后,如果您只想让数据进入数据库并且不关心截断某些列,那么一定要对其进行子串化。在极少数情况下,我倾向于将第一个和第二个以及唯一的子字符串组合在一起。
猜你喜欢
  • 2021-09-17
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多