我在一家公司工作,我们经常为开始使用我们产品的新客户进行进口。有时我们会收到包含大量损坏数据的文件,例如预期包含时间的特定列,如
TIME
----------
17:12:55
22:32:38
12:16:56
但是除了像
这样的实际数据外,有些行还有一些无用的数据TIME
----------
17:12:55
22:32:38kldjfakdfhehdkdfjdkff
12:16:56
多列和多行都会发生这种情况。对于某些行,附加了无用的数据,并为某些行添加了前缀。我的问题是这些损坏的数据是否可以被过滤,我们是否可以成功导入文件或这些文件是无用的,我们应该向我们的客户要求新文件。
答案 0 :(得分:0)
在我的前公司,我们编写了一个C#脚本,即使它们已损坏也会导入CSV。基本上我们逐行逐列导入到临时表中。如果行被破坏一半,我们只是尽可能地导入。然后,在SQL中应用了数据质量检查。像这样,可以导入从客户端收到的所有垃圾CSV文件,而不会导致SSIS导入失败。
因此,如果您有时间和耐心,可以编写类似的C#导入(在线提供大量示例)。我们的导入是通用的,因此可以使用相同的脚本导入每个可能的文件,即SQL表中定义的文件的业务逻辑(列映射)。
这样的临时表:
CREATE TABLE [Staging].[FilesStaging](
[FilesStagingID] [int] IDENTITY(1,1) NOT NULL,
[ProcessingID] [int] NULL,
[ImportProcessingID] [int] NOT NULL,
[ProcessingTypeID] [smallint] NOT NULL,
[FileName] [varchar](255) NULL,
[ExcelSheet] [varchar](255) NULL,
[Col1] [varchar](255) NULL,
[Col2] [varchar](255) NULL,
[Col3] [varchar](255) NULL,
[Col4] [varchar](255) NULL,
[Col5] [varchar](255) NULL,
[Col6] [varchar](255) NULL,
[Col7] [varchar](255) NULL,
[Col8] [varchar](255) NULL,
[Col9] [varchar](255) NULL,
[Col10] [varchar](255) NULL,
[Col11] [varchar](255) NULL,
[Col12] [varchar](255) NULL,
[Col13] [varchar](255) NULL,
[Col14] [varchar](255) NULL,
[Col15] [varchar](255) NULL,
...