SQL2008 Integration Services - 使用不同的文件架构加载CSV文件

时间:2010-11-22 15:06:57

标签: sql-server sql-server-2008 csv ssis

我正在使用SQL2008在带有Integration Services的表中加载传感器数据。我必须处理数百个文件。问题是CSV文件的模式都略有不同。每个文件最多可包含20个数据字段。所有数据文件都有这些共同的字段。某些文件包含其他字段的所有字段。此外,字段的顺序可能会有所不同。

以下是文件架构的示例。 站名,站ID,LOCAL_DATE,T_1,TD_1,RH_1,CL_1,RS_1,RI_1,PR_1,RD_1,SH_1,CL_2 站名,站ID,LOCAL_DATE,T_1,TD_1,RH_1,CL_1,RS_1,RI_1,PR_1,WS_1,WD_1,WSM_1,WDM_1,SH_1 站名,站ID,LOCAL_DATE,T_1,TD_1,RH_1,RS_1,RI_1,PR_1,RD_1,WS_1,WD_1,WSM_1,WDM_1 站名,站ID,LOCAL_DATE,T_1,RH_1,RS_1,PR_1,VI_1,PW_1,WS_1,WD_1,WSM_1 站名,站ID,LOCAL_DATE,T_1,RH_1,RS_1,WS_1,WD_1,WSM_1 电台名称,电台ID,LOCAL_DATE,T_1,RH_1,RS_1,PR_1,VI_1,WS_1,WD_1,WSM_1

我正在使用数据流脚本任务通过CreateNewOutputRows()和MyOutputBuffer.AddRow()处理数据。我有一个工作包加载数据,但它不可靠和健壮,因为我有更多的文件包失败,因为文件架构尚未在CreateNewOutputRows()中定义。

我正在寻找能够应对文件架构变化的动态解决方案。 Doeas有没有任何想法?

3 个答案:

答案 0 :(得分:0)

谁控制传感器输出的数据模型?如果不是你,他们知道他们在做什么吗?如果他们每次发明新的传感器时都会创建新的和不一致的模型,那么你几乎就是小溪。

如果您可以影响或控制CSV文件架构的演变,请尝试提供顶级数据架构。在存在数据库之前的糟糕时期,由记录组成的文件通常具有“记录类型”作为每个记录的第一个字段。 CSV文件可以以相同的方式组织。每条记录的第一个字段可以指示您正在处理的记录类型。当您获得未知类型时,请将其放在“错误的输入文件”中,直到您可以维护您的软件。

如果这对你来说不够动态,你可能不得不考虑人工智能,或者寻找不同的工作。

答案 1 :(得分:0)

也许cmd命令很好。在cmd中,您可以使用sqlserver import csv。

答案 2 :(得分:0)

如果所有格式相同的CSV文件使用相同的文件名约定,或者如果它们可以以某种方式分离出来,则可以为每种文件架构类型使用ForEach循环容器。

分离出CSV文件的可能方法是在SSIS中运行脚本(在VB中),该脚本读取CSV文件的第一行并检查不同的类型(如果列名在第一行中)然后移动将文件放到适当的文件夹中,以便在ForEach循环容器中使用。