导入列包含 NULL 值或逗号的 CSV 文件时出现问题
Problem in importing CSV file with column containig NULL values or comma
我有一个包含两列的 CSV 文件:
Employee_Name,EmpID
"Harry, Watson",1
"Amy, Black",2
"O'hare, Lynn",3
Jeremy Prater,4
,,
,,
我正在使用 biml 生成我的包:
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<FileFormats>
<FlatFileFormat Name="FlatFile" CodePage="1252" TextQualifer="""
ColumnNamesInFirstDataRow="true" IsUnicode="false">
<Columns>
<Column Name="Employee_Name" DataType="AnsiString" Length="255" Delimiter="Comma" />
<Column Name="EmpID" DataType="Int64" Delimiter="Comma" />
</Columns>
</FlatFileFormat>
</FileFormats>
<Connections>
<FlatFileConnection Name="importexcel"
FilePath="HR.csv"
FileFormat="FlatFile" />
<Connection Name="AppSTG"
ConnectionString="XXXX"></Connection>
</Connections>
<Databases>
<Database Name="STG_App" ConnectionName="AppSTG"></Database>
</Databases>
<Schemas>
<Schema Name="HR" DatabaseName="STG_App"></Schema>
</Schemas>
<Tables>
<Table Name="Employee" SchemaName="STG_App.HR">
<Columns>
<Column Name="Employee_Name" DataType="AnsiString" Length="255" />
<Column Name="EmpID" DataType="Int64" />
</Columns>
</Table>
</Tables>
<Packages>
<Package Name="Load Flat File Data" >
<Tasks>
<Dataflow Name="Load Flat File Data">
<Transformations>
<FlatFileSource ConnectionName="importexcel" Name="FlatFile"/>
<OleDbDestination Name="Target" ConnectionName="AppSTG">
<TableOutput TableName="STG_App.HR.Employee" />
</OleDbDestination>
</Transformations>
</Dataflow>
</Tasks>
</Package>
</Packages>
</Biml>
创建以下数据流:
当我尝试执行包时,出现以下错误:
« Data conversion failed. The data conversion for column "EmpID"
returned status value 2 and status text "The value could not be
converted because of a potential loss of data.". »
您已将 EmpID 字段定义为 Int64,当您在那里有数字时它会很好用,但在没有数据的情况下(但仍然存在一行),SSIS 将尝试转换空字符串到一个数字,那将失败。
如果您从 truncation/error/etc 的平面文件源添加错误路径,您会看到第 5+ 行沿着该路径向下移动。对于这些数据,我会将所有内容定义为字符串,因为您需要将数据放入管道,然后您需要根据任何有意义的业务规则对其采取行动(不 name/id,丢弃它) .
正如@alex 在评论中指出的那样,最后一行表示有三列数据,而您定义了两列,所以当平面文件源达到这一点时,您就会崩溃。 SSIS 将无法处理这样不一致的文件格式。
我有一个包含两列的 CSV 文件:
Employee_Name,EmpID
"Harry, Watson",1
"Amy, Black",2
"O'hare, Lynn",3
Jeremy Prater,4
,,
,,
我正在使用 biml 生成我的包:
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<FileFormats>
<FlatFileFormat Name="FlatFile" CodePage="1252" TextQualifer="""
ColumnNamesInFirstDataRow="true" IsUnicode="false">
<Columns>
<Column Name="Employee_Name" DataType="AnsiString" Length="255" Delimiter="Comma" />
<Column Name="EmpID" DataType="Int64" Delimiter="Comma" />
</Columns>
</FlatFileFormat>
</FileFormats>
<Connections>
<FlatFileConnection Name="importexcel"
FilePath="HR.csv"
FileFormat="FlatFile" />
<Connection Name="AppSTG"
ConnectionString="XXXX"></Connection>
</Connections>
<Databases>
<Database Name="STG_App" ConnectionName="AppSTG"></Database>
</Databases>
<Schemas>
<Schema Name="HR" DatabaseName="STG_App"></Schema>
</Schemas>
<Tables>
<Table Name="Employee" SchemaName="STG_App.HR">
<Columns>
<Column Name="Employee_Name" DataType="AnsiString" Length="255" />
<Column Name="EmpID" DataType="Int64" />
</Columns>
</Table>
</Tables>
<Packages>
<Package Name="Load Flat File Data" >
<Tasks>
<Dataflow Name="Load Flat File Data">
<Transformations>
<FlatFileSource ConnectionName="importexcel" Name="FlatFile"/>
<OleDbDestination Name="Target" ConnectionName="AppSTG">
<TableOutput TableName="STG_App.HR.Employee" />
</OleDbDestination>
</Transformations>
</Dataflow>
</Tasks>
</Package>
</Packages>
</Biml>
创建以下数据流:
当我尝试执行包时,出现以下错误:
« Data conversion failed. The data conversion for column "EmpID" returned status value 2 and status text "The value could not be converted because of a potential loss of data.". »
您已将 EmpID 字段定义为 Int64,当您在那里有数字时它会很好用,但在没有数据的情况下(但仍然存在一行),SSIS 将尝试转换空字符串到一个数字,那将失败。
如果您从 truncation/error/etc 的平面文件源添加错误路径,您会看到第 5+ 行沿着该路径向下移动。对于这些数据,我会将所有内容定义为字符串,因为您需要将数据放入管道,然后您需要根据任何有意义的业务规则对其采取行动(不 name/id,丢弃它) .
正如@alex 在评论中指出的那样,最后一行表示有三列数据,而您定义了两列,所以当平面文件源达到这一点时,您就会崩溃。 SSIS 将无法处理这样不一致的文件格式。