【问题标题】:SSIS Batch Import CSVs to Multiple Tables [closed]SSIS批量导入CSV到多个表[关闭]
【发布时间】:2014-03-26 23:15:57
【问题描述】:

我刚开始在 Visual Studio 2008 中使用 SSIS,并学习了如何创建一个项目以指向一个 CSV 文件夹,然后导入到我的 SQL Server 上的一个表中。对我来说,下一步是尝试让它变得更加动态,我可以在其中指向具有不同结构的 CSV 文件夹,并为文件夹中的每个 CSV 文件创建一个新表。

每个 CSV 在列数方面都有自己的结构,都使用双引号来限定文本、第一行标题并用逗号分隔。我无法弄清楚如何参数化在数据流步骤中动态创建具有相应名称的新表。平面文件源能够生成 SQL 来为第一个平面文件创建表,但下一个 CSV 不同并且失败。这可能吗?

【问题讨论】:

  • csv 文件是否每天/每周/随时更改,或者是否存在一组固定的文件,其中包含特定列的新数据会被刷新?在我看来,只是将任何放在新表中的文件导入到新表中会很快变得笨拙。
  • 很遗憾,不,列会随着时间而变化。它是历史数据,虽然总体结构保持不变(可能 70% 的列始终存在),但在几个月内添加了新的数据点/列,而其他月份则删除了、重新添加等内容。因为数据设计中的这种波动性,这就是我们想要为这些导入创建通用程序的原因。希望有帮助。谢谢!
  • 文件数有变化吗?

标签: sql sql-server csv ssis


【解决方案1】:

AFAIK,SSIS 没有一个组件来动态检测 CSV/文本文件的结构,对其进行相应的解析,然后准备将其加载到某个表中。

在我看来,您的任务不像“ETL 工具任务”。它看起来更像是一项编程任务。 ETL 工具仅适用于“常见任务”,不适用于自定义任务。所以,我会在 SSIS 中这样做——创建一个控制表,其中包含文件位置和名称等参数、“分隔符”、“行标题”等列。然后,制作一个脚本任务(.net 编程!)设置这些参数以根据结构解析文件并将它们加载到目标表中,所有这些都在 SSIS 中进行编程。也许你可以有另一个控制表来决定哪个文件去哪个数据库/表以及使用哪个名称。

另外,如果这是一项一次性或罕见的任务,仅涉及 5-10 个文件,那么我建议您手动完成,而不是为其编写代码。编写文件解析器 也许“简单”,但它不是一项微不足道的任务。在 google 上搜索如何解析 CSV/Text 文件。

【讨论】:

    【解决方案2】:

    解决此问题的一种技术含量较低的解决方案是将所有 CSV 合并到一个 excel 文件中,然后使用 SQL Server 中的导入/导出向导导入该 excel。

    此网站有将所有 CSV 合并到一个 excel 文件所需的 VBA 脚本:https://www.extendoffice.com/documents/excel/3230-excel-import-multiple-csv-files.html

    【讨论】:

    • 我希望批量加载数据库中具有 不同 结构/目标表的一堆数据文件 - “我可以在其中指向一个 CSV 文件夹,其中包含不同的结构并为文件夹中的每个 CSV 文件创建一个新表”。如果它们的结构不同(它们不同),则将多个 CSV 组合成一个 CSV 是行不通的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2014-12-22
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多