【问题标题】:Can we use SSIS to parse data from application before we store in db...?我们可以在存储到数据库之前使用 SSIS 解析来自应用程序的数据吗?
【发布时间】:2011-03-29 20:11:18
【问题描述】:

探索这里的可行性...我们在 mvc3 网络应用程序中有一个 UI 页面,管理员将使用它来上传“csv”文件。是否有可能有一个将由应用程序调用的 SSIS 包。如果所有这些数据都有效,它将验证/转换所有这些数据并存储到数据库中,或者如果存在无效数据,则将错误详细信息返回给应用程序?

只是试图利用 SSIS 的功能来解析文件和转换数据。如果这不可能,有没有更好的方法?

请提供您的想法..非常感谢!

更新: 是的,需要即时执行 ssis.. 并在 UI 页面上返回一条消息 ..根据 SSIS 的消息告诉“上传者”是否上传失败会回馈给应用程序。

【问题讨论】:

  • 你的意思是要在网页运行时从网页调用SSIS?
  • @John:希拉里在对我的回答的评论中解释说,他们确实希望将实时错误信息返回给上传文件的用户。这就是“抛出错误细节”的意思......

标签: .net asp.net sql-server-2008 ssis


【解决方案1】:

您可以使用 SSIS 解析文本文件。您也可以使用大锤来驱动修整钉子。更好的选择是像FileHelpers 这样让您远离自己解析文本文件的文本解析泥。


鉴于编辑和辩论,我会详细说明一下。主要是我看到直接从您的 MVC 控制器调用 SSIS 存在一些大问题:

a) 需要大量外部依赖。您的开发、CI 和暂存环境将需要启用 SSIS 的完整 SQL 服务器,并且可能需要大量其他配置,具体取决于实施细节。

b) 速度 -- SSIS 是一个大型作业引擎,在它开始工作之前需要一段时间才能启动。

c) 消息传递——如果操作的目的是让用户知道哪里出了问题,那么 SSIS 是错误的工具。除非您想编写一个工具来将 SSIS 导入错误翻译成可读的英语。那么你可能应该停止你正在做的任何事情并出售该工具而不是解决这个问题。

另一方面,大多数基于 .NET 的文件解析和 C# 都为您提供了大量的错误处理功能,让您可以更好地快速向用户提供可理解的错误消息。

最后,如果您在这里查看大文件,您确实需要考虑某种排队和消息传递系统。在这种情况下,SSIS 可能更有意义,尽管我仍然认为错误消息几乎无用。

【讨论】:

  • @Paul:所以您说尝试在 Web 应用程序中安装 SSIS,然后在您可以有一些不错的、干净的、不依赖于 SQL-Server 的情况下捕获错误输出是个好主意代码为你做吗?
  • @Wyatt:“挂载 SSIS”是什么意思? SSIS 是 SQL Server 产品系列中可用的工具...您无需安装它。您指定一个 SSIS 包,然后执行它。
  • -1:请解释一下“泥”。 SSIS 处理 CSV 文件很简单。
  • @Paul:我的意思是您从 MVC 网页控制器中调用 SSIS。与使用一些本机 C# 代码现场解析文件相比。
  • @John Saunders:泥意思是解析你自己的 CSV 文件,他听起来像是一个只知道 SSIS 作为将 CSV 导入 SQL Server 的方式的人。
【解决方案2】:

当然,SSIS 包可以做到这一点,这就是它的目的。如果您有经验丰富的 SSIS 开发人员,这当然会更容易,因为 SSIS 可能会非常令人生畏。您可以在包和异常表中创建日志记录以丢弃不良记录,然后在该过程完成后,检查日志/异常表以将任何不良记录返回给启动该过程的用户。我们有一个数据库,用于存储每次运行 SSISI 包时的元数据,您可能也需要它,以便能够确定错误记录是否与用户上传的文件或其他人同时运行的文件有关.

【讨论】:

  • 重点是如何让我的 Web 应用程序随时随地与 SSIS 包通信、传递文件或输出错误或成功消息?
【解决方案3】:

您可以从代码中执行 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 命名空间。

Here's an article on executing SSIS from c#.

【讨论】:

    【解决方案4】:

    您正在描述一个相当标准的ETL procedure,而这正是 SSIS 的设计目的。 SSIS 确实会读取 CSV 文件并能够对各个字段执行验证。您如何处理该验证的结果(好或坏,通过不通过)完全取决于您。

    是的,您可以根据需要即时启动 SSIS 包。查看dtexec utility。您还可以设置一个 SQL Server 代理作业,该作业将监视接收上传的 CSV 文件的文件夹并自动触发针对它们的 SSIS 进程。你的 ASP.NET 代码只需要担心上传。其他一切都将是基于 SQL Server/SQL 代理的 ETL 操作。

    【讨论】:

    • 重点是如何让我的 Web 应用程序随时随地与 SSIS 包通信、传递文件或输出错误或成功消息?
    • 如果我使用 .. sql server agent-- 我无法向用户返回实时错误/成功消息。这是这里的要求,因为我们必须提示他更正文件并再次上传..
    • 哈哈。行。我不明白你所说的“退后”是什么意思。在这种情况下,如果您想要实时错误信息,那么 C# 绝对是更好的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 2021-11-28
    相关资源
    最近更新 更多