如何解压缩文本文件并将其上载到数据库

时间:2011-08-15 20:25:04

标签: ssis

我迫切需要帮助解决问题所以如果有人给我一些建议或链接来解决以下问题,我将非常感激。

每天早上我们收到一个名为 Statistics.tar.gz 的Zipped文件夹(通过ftp服务器下载),其中包含200个文本文件,其中包含今天和昨天日期附加到每个文件名的文件:

Customer_20112508_20112408.txt, Customer_Contact_ContactType_20112508_20112408.txt, Customer_Orders_20112508_20112408.txt, Sales_Team_20112508_20112408.txt, Team_20112508_20112408.txt, 。 。

我有数据库包含200个表,每个文件的表格如下

客户, Customer_Contact_ContactType, Customer_Orders, 销售团队, 队,

我需要解压缩文件夹并修剪文件名(删除日期),然后将每个文件上传到数据库中的对应表,最后将文件夹(Statistics.tar.gz)移动到存档文件夹。 我之前没有使用过SSIS,但我被告知这是本场景的最佳解决方案,我也在考虑使用Windows服务应用程序。

注意:性能在这里并不重要,因为文本文件通常很小。

谢谢


我已经设法解压缩文件并将它们移动到另一个文件夹(C:\ temp)。并创建了一个存储过程,例如将每个文件批量插入其对应的表(将Customer.text插入Customer)。 / p>

我正在尝试使用带有执行SQL任务的foreach循环容器,但它无法正常工作。

我很感激任何帮助。

由于

1 个答案:

答案 0 :(得分:3)

与往常一样,将问题分解成越来越小的块,直到它很容易解决。如果明天你需要这个,并且你从未接触过SSIS,就像我喜欢这个工具一样,我不认为你会成功使用它。

设置任务

创建新的SSIS包后,您需要为每种唯一的文件类型创建一个平面文件连接管理器。该文件的名称可以每天更改,但客户,销售等文件的格式不能更改,否则SSIS将失败。

您需要创建一个OLE DB连接管理器才能与目标数据库通信。

您需要一个文件连接连接管理器来保存对tar / zip文件的引用。

您需要创建一些变量来保存上述连接管理器的连接字符串,并将它们分配给这些连接管理器上的ConnectionString表达式。

右键单击包的背景,选择属性并找到包含保护级别的属性,将其从EncryptSaveSensitiveWithUserKey更改为DontSaveSensitive。

将Package.dtsx重命名为有用的东西,例如DailyCustomerSalesImport

解压缩文件

抓住像7-zip这样的实用程序并解压/解压缩文件programmatically extract tar.gz in a single step (on windows with 7zip)要在SSIS中使用,您需要使用“Execute Process Task

导入数据

SSIS可以使用通配符名称,因此除非您真的只想(由“File System Task”作为重命名处理),否则不需要从文件名中删除日期

从解压缩任务中,我定义了Foreach Loop Container来加载每种文件类型(Customer,Customer_ContactType等)。每个Foreach容器都负责查找正确的文件类型并将其分配给变量,用作为每种文件类型定义的平面文件连接管理器上的表达式。 Looping over files with the Foreach loop

在每个Foreach容器中,您现在已准备好执行某些操作并且某些内容为Data Flow Task。这些数据流中的每一个都很可能看起来相同,平面文件源直接映射到OLE DB目的地,几乎没有涉及转换。

存档原始

你需要一个指向tarred zip文件的连接管理器,并使用“File System Task”连接最后一个Foreach循环容器的输出(如果你将它们串联起来)或拖动来自Foreach循环容器的所有输出如果你并行使用文件系统任务。

他们将贴片推到我的机器上,或者我会告诉你一个包装的基本线框。我需要经过检查才能将这么多时间用在一个永远不会再被审查的问题上;)