2017-06-27 96 views
0

我有一个很大的XML文件,大约800 MB,带有许多标签和属性。我需要从这个文件中提取不同的值,因此我使用了许多SORTJOIN转换。所有这些工作都很好,不需要太多时间,除了下面图片中显示为红色椭圆形的最后一个SORT转换。这需要永远。SORT转换需要永久

enter image description here

如果我使用一个较小的XML文件,它会走通,并不会花费太多时间。所以我认为问题与它处理的数据集的大小有关。我想知道你是否知道可以帮助我处理这种情况的任何方式。任何需要更改的属性以改进此特定情况的性能。我正在使用Visual Studio 2015.谢谢!

+0

您是否考虑编写SQL查询并使用Exec SQL步骤更新状态值,而不是执行查找和合并?此外,所有的来源XML?如果是这样,你可能想要在某个时候转换成真正的表格。这将会提高性能。 –

+0

@JacobH请纠正我,如果我没有得到你的建议,但我不是“更新”,我没有“查找”。我只是查询一个状态表的小型表,根据状态ID加入状态名称。我看不到我如何在这里使用Exec SQL任务。 – TheEsnSiavashi

+0

如果你不查找数据,为什么你有一个叫做“LKP”的步骤? :)我的问题代表。除了您从各种数据源进行大量合并和排序之外,您还没有给我们提供任何信息,其中一个比其他数据源慢。 –

回答

1

为了加快SSIS中的Sort转换速度,你真的做不了多少事情。最好的解决方案是找到一种不必使用Sort转换的方法。这通常意味着将数据放入索引数据库表中,并在SELECT ... ORDER BY查询中进行排序。

+0

谢谢。不幸的是,避免使用'SORT'似乎不是我的选择,因为我需要使用MERGE JOIN从OLE DB源和Merge中获取一些状态名称。我也没有权限为此创建一个ETL表,并要求这将是我的最后一个选项。 – TheEsnSiavashi

+0

如果要合并状态名称,并且只有大约50个可能的名称正在合并,则可能会从查找转换(而非合并连接)获得更好的性能。特别是如果状态名称不会更改并因此可以被缓存。在查找之前,您不必对传入的行进行排序。 –

+0

我也想过这个,但是,MERGE JOIN'做了一个'left join'。 '看起来'只给我匹配和不匹配。无论如何,我不知道“LOOK UP”可以作为左连接工作。 – TheEsnSiavashi