【发布时间】:2015-09-07 08:01:27
【问题描述】:
我们正在尝试设计一种将超大 Excel 文件导入 SQL 数据库的最佳方法。使用 SSIS 有点麻烦,因为它会扫描顶部的 X 记录以确定文件的格式,但更靠下的行可能会有所不同,因此需要大量的试验和错误,我们必须将不寻常的列放在顶部所以 SSIS可以“学习”。
当我们导入新的文件格式时,它们在行格式等方面符合规范 - 所以我们可以说我们提前知道架构。 SQL 目标表具有相同的架构,但有几个额外的列,例如插入日期和原始文件名。
有没有更简单的方法来为我们要插入的新文件创建格式定义?我们不必使用 SSIS,我们对任何其他工具持开放态度,以期尽可能实现自动化。有一个测试我们将导入的数据的完整性的问题,我们计划对暂存数据集进行基本查询,例如“不到 1% 的记录可能会遗漏邮政编码”等。
非常感谢
【问题讨论】:
-
文件必须在 Excel 中吗?如果可以导出为 CSV,则可以使用 BCP 将整行导入临时表中的单个记录,然后在其上运行存储过程以检查错误,以及上面提到的“学习”部分。然后你可以考虑从那里很容易地自动化它。
-
有一个服务器级设置告诉 SSIS 扫描多少行以确定文件的格式。我忘记了设置的名称,但我确信它可以很容易地用谷歌搜索。
-
@TabAlleman 是正确的,您可以使用 TypeGuessRows=0 (jingyangli.wordpress.com/2009/02/13/…),但是大文件可能会出现性能问题,因为它会扫描整个文件。我建议将文件转换为分隔格式。大多数系统将不仅仅导出到 excel。
-
BCP 和 SSIS 的建议都为我们指明了正确的方向 - 非常感谢大家
-
您也可以使用脚本任务并将文件中的所有内容作为文本读取,而不是使用 Excel 源。在以后的任务中适当地格式化它。 IMEX = 1 也可用于读取混合格式的数据
标签: sql-server csv ssis pentaho bcp