2011-06-08 68 views
0

我使用SQL Server在本地存储数据以进行统计分析。我从通常有数百列的csv文件创建我的表。手动规定列名和类型将很乏味,所以我在“导入向导”中使用“建议类型”来选择正确的类型。使用最后一行在SQL Server 2008 R2导入向导中建议类型

这在大部分时间都可以使用,但是我的csv文件经常有一个“衣衫褴褛的上边缘”(即很多列在第一千或上百行中都是空的 - 这些文件很多都是1+ gb,因此需要SQL Server来促进子集连接)。由于导入向导仅查看最多1000行,因此导入失败。有没有一个聪明的解决方法?

我能想到的解决方案是将最后一千行左右移动到文件顶部,位于标题行下方。但是由于这些文件中的一些文件是1+ gb,有数百万行,我不能在文本编辑器中完成。有没有一种方法可以胜过导入向导?还是往回读?或者移动最后一千行左右的行吗?

谢谢!

回答

0

看起来你不能在向导中设置,但如果你将它作为完整的SSIS解决方案,你可以。 和/或1000行限制是SQL Server 2008(不知道R2)的错误

更多

我已经在一些点设置该样本行我见this但不记得以及我使用的是什么版本/ SP级别。

+0

@gbn - 我无法关注您的链接。我可以在免费的学术版本中使用SSIS吗?谢谢! – 2011-06-08 19:36:07

+0

@richardh:抱歉,狡猾的复制/粘贴。修复。是的,我认为你可以使用它 – gbn 2011-06-08 19:40:23

+0

@gbn - 谢谢!我发现了这个。我没有一个名为SSIS的程序,所以我可能仅限于文本处理解决方案。 – 2011-06-08 19:54:23

0

您可以指定标题行以跳过,直到获得预期结果。

我会增加标题行跳过1000左右,然后减少它,以确保我没有错过任何东西,直到我可以得到一个体面的数据预览。没有在这么大的文件上试过这个,但是看不出为什么它不适用于体面的机器。

如果你想要的东西不那么单调,一个简单的批处理文件或控制台应用程序可以从这些文件中删除空白。只要确保它使用正确的文本阅读器方法来确保它读取单行而不是尝试将整个文件加载到内存中。

+0

我会试试看。我不确定我是否可以将此选项与使用标题选项结合使用。 – 2011-06-08 19:34:59

+0

建议不同的选项。批处理/控制台应用程序方法就是在导入它们之前“清理”文件,就像你现在一样。应该非常直截了当地删除多余的换行符,甚至是空行而不将整个文件加载到内存中。这不是完美的,但意味着1点击清洁,然后像现在这样做。 – Gats 2011-06-08 19:38:30

+0

我想保留不完整的条目。如果文件较小,在Vim中移动几千条线就很容易。我想我需要一个命令行解决方案,即使它是删除第一百万个条目并稍后添加,但那不在我的控制台之内。有没有使这成为可能的语言或命令? – 2011-06-08 19:42:49

相关问题