使用 Informatica 做 ETL 的时候,可能会遇到这两种隐性的数据错误(之所以说隐性,因为 monitor 日志没有说明具体什么错误,需要根据经验判断):
- 数据值的实际长度超出数据库表或者 mapping 组件中设定的长度
- 数据值的类型与数据库表或者 mapping 组件中设定的数据类型不同
数据超出设定长度范围
在第一种情况中,workflow 会自动跳过超出长度的数据继续运行,并且最终 workflow 状态为 succeeded。比如有 20 条字符串数据,设定长度为 5,那么如果其中一条数据为“Hello World”,长度超过 5,最终抽取的数据条数为 19,这条超出长度的数据就会被 reject。这种情况大部分时候可以通过 monitor 进行监控,如下图,前面例子中应该显示的 applied rows 应该为 19,rejected rows 为 1:
数据类型与所设定不同
至于第二种情况,workflow 最终的状态是 failed,但 monitor 日志会显示如下:
也就是说,突然报错,也没有很详细的错误提示。更神奇的是,前面居然运行成功那么多数据了。
遇到上面这种情况时,就可以考虑数据类型的错误了。
Informatica 遇到数据类型不一致时,会自动停止工作流并且报错。比如说有 20 条数据,设定目标表的数据类型为 int 型,在源表中前面 15 条都是 int 型数据,但是第 16 条数据为 99.9,不是 int 型,那么最终会成功运行 15 条数据然后报错。monitor 目标表运行状态中 applied rows 为 15,rejected rows 为 0。