我是一名中级数据库程序员,现在已经使用SSIS几年了,感觉我有一个非常基本的理解,而且我总是使用{{3所示的增量加载结构}}。我的问题是我从来没有为这个项目一次处理超过15个文件。
我现在有一个新项目,需要增量加载200个文本文件,大小范围从500MB到2GB,列数从3到232列。
据我所知,由于模式不同,我无法使用ForEach容器遍历这些文件,但除了拥有200个不同的连接管理器和200个单独的任务之外,真的没有其他选择吗?
我有一个工作bcp将它们导入到SSMS中,到目前为止,我最好的想法是将所有字段保留为导入文本,然后我可以为所有具有相同列数的表创建ForEach容器吗?我的思维过程是元数据在技术上是相同的(所有varchar列,相同的列数),并且我可以在增量加载发生后在最终表上进行转换。这至少会将流程缩减为一个连接管理器,大约100个变量和100个任务,因为只有100个不同的列组合(如果这是有道理的。)
任何建议,或类似解决方案的链接都会很棒。
谢谢。
答案 0 :(得分:0)
workaround在MyDocuments中提取Bids Helper并添加到Visual Studio工作并且非常简单。确保并手动添加架构。
我现在已经编写了一些biml脚本来完成这项任务。第一种是使用循环为每个表创建一个dtsx包,使用LookUp和ConditionalSplit任务来完成增量加载。这适用于中小型表,但对于较大的表,数百万行和数百列,由于LookUp必须将数据缓存到内存中,所以它非常慢,如果你有足够的内存来实现这一点!有关calculating LookUp cache size here的更多信息。
我的解决方案是编写一个单独的biml脚本来为每个表创建一个包,它将使用Execute Sql Task执行一个merge语句。这似乎是最好的方式,因为Merge比查找更有效。
第三个biml脚本是生成一个包,然后运行所有其他包。
使用biml的另一个好处是,如果对表,模式等有任何更改,您需要做的就是重新运行biml脚本,它将为您重建所有dtsx包。
感谢您的帮助!