指定平面文件数据类型与使用数据转换

时间:2017-03-16 14:56:51

标签: sql-server ssis

这可能是一个愚蠢的问题,但我必须要问,因为我看到了很多...我继承了很多包,开发人员在将平面文件转储到各自的sql server表时会使用数据转换转换形状。这是非常直接的,但我总是想知道为什么开发人员不会在平面文件连接中指定正确的数据类型,然后直接加载到表中?

例如:

通常我会看到包含DT_STR列的平面文件连接,然后在包中转换为正确的类型,即:DT_STR,长度为50到DT_I4。但是,如果登台表和平面文件基于相同的模式 - 为什么不在平面文件连接中指定正确的类型(DT_I4)?使用我不知道的数据转换任务是否有任何额外的好处(性能,错误处理)?

2 个答案:

答案 0 :(得分:4)

这是一个很好的问题,没有一个正确的答案。这是我使用的策略:

如果数据源不可靠

即。有时int或日期值是字符串,就像你有字面词' null'而不是值为空白。我会将数据源视为字符串,并处理下游转换数据。

这可能意味着只需将数据暂存到表中并使用数据库进行转换并从那里进行加载。此模式可避免源组件抛出错误,这些错误总是很难排除故障。此外,它避免了必须将错误处理添加到数据转换组件中。

相反,如果数据库引发转换错误,您可以轻松查看临时表中的数据以检查问题。最后,SQL比日期转换更容易使用日期转换。

如果数据源可靠

如果日期和数字始终是日期和数字,我将在连接管理器中定义数据类型。这样可以清楚地了解您对文件的期望,并使用更少的组件更轻松地维护包。

此外,如果您转到flatfile源的高级属性,可以将整数和日期设置为快速解析,这将加快读取时间:https://msdn.microsoft.com/en-us/library/8893ea9d-634c-4309-b52c-6337222dcb39?f=255&MSPPError=-2147217396

当我使用数据转换时

我很少使用数据转换组件。但我发现它有用的一个案例是从/转换为unicode。例如,当从ado.net源读取时,这可能是必要的,该源始终将输入视为unicode。

答案 1 :(得分:2)

您可以在@abstractmethod页面中更改平面文件连接管理器中的输出数据类型,或右键单击Advanced中的源Data flow以更改数据类型,然后再加载它。< / p>

我认为其中一个好处是Advanced editor转换可以允许您输出额外的列,通常名为conversion,在某些情况下,您可以使用这两列。此外,有时当您从copy of ..加载数据时,所有数据都来自Excel source,您需要使用Unicode来执行数据TF等。

另外,仅供参考,您也可以使用Data conversion TF来转换数据类型。

更新[需要进一步确认]:

Derived Column开始,字符串类型的最大长度为255,而在flat file source connection manager中,它可以设置为255.