2017-07-14 58 views
2

我对SQL Server管理相当陌生,目前正在寻找使用SSIS构建解决方案。 我的问题主要是关于“我的逻辑是正确的”和一些关于最佳实践的更小的事情。SSIS - 定期导入多个sql视图

但让我画你的照片开始!

我有一个应用程序,它为我提供了数据库视图,以减轻对该数据库的压力我想将这些视图的数据定期传输到辅助数据库/不同的实例,然后我可以在其上设置更多特定权限/转换/其他视图建立在该数据上。我最初提供的观点在我如何获得它们方面已经得到了很大的修正。

经过一番阅读后,我觉得要走的路是使用SSIS。我开始构建我的包,并使用“SSIS导入和导出向导”进行初始传输。

现在对于我的第一个问题,这将是传输数据的正确方法,并且SSIS是正确的工具吗?

其次,我注意到向导做了多个SQL Preperation任务和数据流任务。 对我来说,将每个成为表格的视图分割成单独的SQL Preperation Task和单独的数据流任务似乎是合乎逻辑的,只是为了保持清晰的图像和尽可能多的控制。虽然这需要一些时间来设置(> 100个视图/表),但它似乎比巫师如何将它们组合在一起更简洁。

此外,由于预处理任务已经创建表,所以这些表在第二次执行时会失败,因为它们已经存在。除了向每个查询添加IFEXISTS子句之外,是否还有一个快速的工作周期?

如果我从错误的方向完全接近完成任何想法,我们将不胜感激,或向更好的解决方案提示。 这个想法是稍后将一些SSAS添加到系统中,并为这些表/数据提供一些数据分析。

谢谢!

+0

也许我误解了这句话。我从多个源视图创建多个表,每个视图具有完全不同的列/数据类型,但它们只是来自同一个源数据库。 –

回答

1

如果您要将数据传输到其他实例,那么SSIS可能是您最好的选择。你的下一个问题是确定你想每次都导入所有的数据,还是只导入新的/更新的项目。

如果您每次都导出所有数据,这会简单得多,并假设您有一个合适的维护时段(例如一夜之间),您可以在不影响最终用户的情况下完成该过程,只需简单地截断数据并重新加载。这显然与增加数据传输量有关。

如果您只想导出新的/更新的数据,现在需要确定是否可以真正计算出哪些行是新的或不同的,而无需简单地将它们与辅助数据库中的数据进行比较。理想情况下,您的源表格将具有可靠的LastUpdateDate列或更好的rowversion列,使用该列可以导出所有具有比次实例中相应表中显示的值更新的行。

对于更新只有路线有很多阅读需要完成,为此我强烈建议你avoid the Slowly Changing Dimension transformation like the plague

如果您想要在大量类似的对象上执行简单操作,例如将ifexists添加到您的帖子中的表格创建中,您也认为有很多重复性任务。解决这个问题的最好方法是学习如何使用Biml自动完成基于元数据的重复性任务。

祝你好运!

+0

谢谢您的信息。但是,这是否意味着将每个表的每个准备任务和数据流任务分解为合理/最佳实践?或者将它们结合起来更有意义? –

+0

@DirkR。我想说的很多都取决于个人喜好和解决方案的需求。我个人更喜欢提取一切,然后在可能的情况下进行转换以使事情简单化,但根据您的情况,这并非总是可行或合理。我会建议设计一些做你想做的事情的方法,然后选择一个看起来最合适的方法。这样你也会强迫自己去看待不同的方法,因此学到更多。 – iamdave

+0

好吧,启动它基本上是:从视图A(DB1)获取数据并将其转储到表A(DB2)中,从视图B(DB1)获取数据并将其转储到表B(DB2)中,然后计划一个包更新/替换我们将在之后决定的频率中的数据。 (所以现在还没有转换)事情是我对SSIS相当陌生,我有一种感觉,如果我现在不正确地设置它,它会永远困扰我:)以一个课程为好,但总是很高兴听到来自真正与之合作并具有真实生活经验的人。 –