【问题标题】:SQL2008 Integration Services - Loading CSV files with varying file schemaSQL2008 集成服务 - 加载具有不同文件架构的 CSV 文件
【发布时间】:2010-11-22 15:06:57
【问题描述】:

我正在使用 SQL2008 将传感器数据加载到具有集成服务的表中。我必须处理数百个文件。问题是 CSV 文件的架构都略有不同。每个文件最多可以有 20 个数据字段。所有数据文件都有这些共同的字段。一些文件具有所有字段,其他文件具有一些字段。此外,字段的顺序可能会有所不同。

以下是文件架构的示例。 站名,站号,LOCAL_DATE,T_1,TD_1,RH_1,CL_1,RS_1,RI_1,PR_1,RD_1,SH_1,CL_2 站名,站号,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 站名,站号,LOCAL_DATE,T_1,TD_1,RH_1,RS_1,RI_1,PR_1,RD_1,WS_1,WD_1,WSM_1,WDM_1 站名,站号,LOCAL_DATE,T_1,RH_1,RS_1,PR_1,VI_1,PW_1,WS_1,WD_1,WSM_1 站名,站号,LOCAL_DATE,T_1,RH_1,RS_1,WS_1,WD_1,WSM_1 站名,站号,LOCAL_DATE,T_1,RH_1,RS_1,PR_1,VI_1,WS_1,WD_1,WSM_1

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

我正在寻找一种能够应对文件架构变化的动态解决方案。有人有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    谁控制传感器输出的数据模型?如果不是你,他们知道自己在做什么吗?如果他们每次发明新传感器时都会创建新的且不一致的模型,那么您就差不多了。

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

    如果这对您来说不够动态,您可能需要考虑人工智能,或寻找其他工作。

    【讨论】:

    • 传感器已在广泛的地理区域安装多年。有一组有限的数据项需要处理,但这些数据项在每个传感器上的设置不一致。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-09
        • 2014-10-12
        • 2022-12-12
        • 1970-01-01
        • 1970-01-01
        • 2018-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多