Problem:我们希望对一些csv数据做一些ETL (提取、转换、加载),在这些数据中,进程通过ASP.NET网站中的一个网页手动启动。
上下文
我们有一个ASP.NET网站,其中包括一个限制性的Admin部分。
在本节中,我们希望添加一个允许用户单击-a-按钮来选择要导入到Server表中的文件的页面。
其中一些文件可能包含很多行-50万行。(每一行约300至400个字符长,大约13列。csv.)
现在,进口这个可能需要一段时间。就像,我希望上传文件内容到某个地方,然后一些背景任务开始。
我在想人们现在是怎么做到的?
我们在Azure,所以我们可以访问Azure的斑点,队列和网络作业,我想。只是不确定这是否是一个常见的问题,已经解决了很多次,并有一些参考材料,以审查。
谢谢!
发布于 2015-12-30 23:37:10
这很容易。我以前也面临过这个问题。
漫长的道路:
1._上传文件。
2._接受文件进行验证
3._转换为datatable (我真的不记得我使用的库的名称)
4._使用本机批量的sql (没有ORMS,它非常简单和快速)
注意:确保它的webconfig配置为支持大量文件。
简短的方式:使用SSRS --创建一个包含csv并将字段映射到表中的包
发布于 2015-12-31 03:27:42
我将假设您已经解决了CSV解析(使用CSV或类似工具)。但是,当正常的页面交互在请求/响应生命周期中运行时,您遇到的问题是如何在网站中处理这个长期运行的任务。但是解析一个大的CSV文件对于一个正常的请求/响应生命周期来说太长了。
是的,这是一个已解决的问题。关于Azure,您可以使用很多工具,您已经提到了其中的一些工具。您还可以启动一个外部应用程序来进行处理,也许可以使用消息队列。但是你也可以完全用ASP.NET来做,Scott有一个关于这个问题的伟大的博客文章。它归结为使用某种类型的库来处理在没有HTTP上下文的情况下在ASP.NET中运行的危险,并且通常选择一个可以在应用程序崩溃中生存下来的工具。像Quartz.NET和汉火这样的库。
从本质上说,有了这类库,您就可以启动一个任务来进行处理,并且可以在它完成后再检查。
发布于 2015-12-30 23:50:38
在单个工具(如SSIS )中执行所有ETL进程。稍后处理您的自定义ETL工具将是一场噩梦。或者您的网站可以触发SSIS ETL。使您的网站把文件放在SSIS可以拾取的位置。
https://stackoverflow.com/questions/34538880
复制相似问题