在这里探索一些东西的可行性......我们在mvc3网络应用程序中有一个UI页面,管理员将用它来上传'csv'文件。是否有可能拥有一个将被应用程序调用的SSIS包。如果存在无效数据,它将验证/转换所有这些数据并存储到db中是否全部有效或将错误详细信息返回给应用程序?
只是尝试利用SSIS的功能来解析文件和转换数据。如果这是不可能的,有更好的方法吗?
请提供您的想法..非常感谢!
更新:是的,需要动态执行ssis ..并在UI页面上回复消息。如果他的上传失败或根据SSIS的消息,则上传“上传者”会回馈申请。
答案 0 :(得分:5)
您可以使用SSIS来解析文本文件。你也可以使用大锤来修整指甲。更好的赌注就是像FileHelpers这样的东西,让你远离解析文本文件的文本解析泥浆。
鉴于编辑和辩论,我将详细说明一下。主要是我看到有一些大问题直接从你的MVC控制器调用SSIS:
a)大规模的外部依赖性。您的开发,CI和登台环境将需要启用SSIS的完整SQL服务器,并且可能还有一些其他配置,具体取决于实现细节。
b)速度 - SSIS是一个重要的工作引擎,需要一段时间才能开始工作。c)消息传递 - 如果操作点是让用户知道什么是错的,那么SSIS就是错误的工具。除非您想编写一个工具将SSIS导入错误转换为可读英语。然后你应该停止你正在做的任何事情并出售该工具而不是解决这个问题。
另一方面,大多数基于.NET的文件解析和C#为您提供了大量的错误处理功能,可以让您更快地向用户快速获取可理解的错误消息。
最后,如果你在这里查看大文件,你真的需要考虑某种排队和消息系统。在这种情况下,SSIS可能会更有意义,尽管我仍然认为错误消息是无用的。
答案 1 :(得分:2)
当然SSIS包可以做到这一点,这就是它的目的。当然,如果你有一位经验丰富的SSIS开发人员,那就更容易了,因为SSIS可能非常令人生畏。您可以在包和异常表中创建日志记录以丢弃错误记录,然后在该过程完成后,检查日志/异常表以将任何错误记录返回给启动该过程的用户。我们有一个数据库,存储每次运行SSISI pacakage时的元数据,您可能也需要这样,以便能够确定错误记录是否与用户上传的文件或其他人大约在同一时间运行的文件相关。
答案 2 :(得分:1)
您正在描述一个相当标准的ETL procedure,这正是SSIS的设计目标。 SSIS确实会读取CSV文件,并能够对各个字段执行验证。你对验证结果所做的事情(好的或坏的,没有通过)完全取决于你。
是的,您可以根据需要动态启动SSIS包。查看dtexec utility。您还可以设置一个SQL Server代理作业,该作业将监视接收上载的CSV文件的文件夹,并自动跳过SSIS进程。您的ASP.NET代码只需要担心上传。其他所有内容都将是基于SQL Server / SQL代理的ETL操作。
答案 3 :(得分:1)
您可以从代码执行SSIS包。我们有一个类似的用户上传CSV文件以执行包的过程,但该包不仅仅是验证/解析逻辑。
如果它只是一点验证和解析逻辑,那么看看Rhino ETL和FileHelpers。事实上,对我们来说,这两个工具足够引人注目,我们正在考虑使用这段时间,但我们没有很多SSIS包,一个专用的SSIS资源,而且我们的大多数软件包都很简单。如果解析非常简单,FileHelpers就是一个很好的工具。
这里有一些关于Rhino ETL的文章。
http://ayende.com/Blog/archive/2008/01/16/Rhino-ETL-2.0.aspx
http://www.codeproject.com/KB/cs/ETLWithCSharp.aspx
https://github.com/ayende/rhino-etl
如果要执行SSIS包,您需要查看Microsoft.SqlServer.Dts.Runtime命名空间。