我正在使用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,站点名称,站点ID,,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,站点名称,站点ID,,VI_1、WS_1、WD_1、WSM_1
我使用数据流脚本任务通过CreateNewOutputRows()和MyOutputBuffer.AddRow()处理数据。我有一个可以工作的包来加载数据,但是它并不可靠和健壮,因为我有更多的文件,这个包失败了,因为CreateNewOutputRows()中没有定义文件模式。
我正在寻找一种能够应对文件模式变化的动态解决方案。有谁有什么想法吗?
发布于 2010-11-22 23:23:18
谁控制传感器输出的数据模型?如果不是你,他们知道他们在做什么吗?如果他们每次发明新的传感器时都会创建新的和不一致的模型,那么你就大难临头了。
如果您可以影响或控制CSV文件模式的演变,请尝试提出顶级数据体系结构。在数据库出现之前的坏日子里,由记录组成的文件通常有一个“记录类型”作为每个记录的第一个字段。CSV文件也可以用同样的方式组织。每条记录的第一个字段可以指示您正在处理的记录类型。当你得到一个未知的类型,把它放在“坏的输入文件”,直到你可以维护你的软件。
如果这对你来说不够有活力,你可能不得不考虑人工智能,或者找一份不同的工作。
发布于 2010-11-22 23:28:49
也许cmd命令是好的。在cmd中,可以使用sqlserver import csv。
发布于 2010-11-22 23:35:19
如果所有具有相同格式的CSV文件使用相同的文件名约定,或者如果可以以某种方式将它们分开,则可以对每种文件模式类型使用ForEach循环容器。
分离CSV文件的可能方法是在SSIS中运行一个脚本(在VB中),该脚本读取CSV文件的第一行,并检查不同的类型(如果列名在第一行中),然后将文件移动到适当的文件夹中,以便在ForEach循环容器中使用。
https://stackoverflow.com/questions/4246788
复制相似问题