我目前面临将 CSV 文件直接从 Blob 存储加载到我们的 Azure SQL 实例的问题。我已正确设置凭据,能够毫无问题地访问文件。但是,执行 BULK INSERT 时,它在某一行失败。我已经在本地 SQL 服务器上尝试了完全相同的文件和完全相同的 BULK INSERT 配置,它可以正常工作,没有任何问题。
BULK INSERT dbo.this_is_a_table FROM
'transformed/this_is_a_csv.csv'
WITH (
DATA_SOURCE = 'this_is_a_blob_storage_data_source'
,FORMAT = 'CSV'
,FIELDTERMINATOR = '|'
,FIELDQUOTE = '"'
,ROWTERMINATOR = '0x0a'
,BATCHSIZE=100000
,TABLOCK
,FIRSTROW = 2
,CODEPAGE = '65001'
)
我尝试将格式更改为 DATAFILETYPE = 'char',尝试旋转 ROWTERMINATORS 等,但到目前为止没有任何运气。
错误如下:
执行查询失败。错误:由于列无效,批量加载失败 CSV 数据文件中的值已转换/this_is_a_csv.csv 第 3128 行, 第 10 列。链接服务器“(null)”的 OLE DB 提供程序“BULK” 报告错误。该供应商没有提供任何有关该产品的信息 错误。
无法从链接的 OLE DB 提供程序“BULK”获取行 服务器“(空)”。
加载数据直到 MAXROW 3127 完全正常工作。我检查了 CSV 文件,没有发现任何突出的内容 - 与文件中的任何其他行基本相同。
对于我还可以尝试什么有什么想法或建议吗?
样本数据:
"MANDT"|"EBELN"|"BUKRS"|"BSTYP"|"BSART"|"BSAKZ"|"LOEKZ"|"STATU"|"AEDAT"|"ERNAM"|"LIFNR"|"EKORG"|"WAERS"|"BEDAT"|"FRGGR"|"FRGSX"|"FRGKE"|"FRGZU"|"FRGRL"|"ABSGR"|"PROCSTAT"
"100"|"4620739302"|"1000"|"F"|"UB"|""|""|"L"|"20230118"|"84HD937J3J392H371842CAZEF91374923HDTAZ32"|"0001000001"|"AB01"|"USD"|"20230118"|"A1"|"S1"|"F"|"XX"|""|"00"|"05"
"100"|"5729302783"|"1000"|"F"|"UB"|""|""|"L"|"20230118"|"84HD937J3J392H371842CAZEF91374923HDTAZ32"|"0001000002"|"AB01"|"USD"|"20230118"|"A1"|"S1"|"F"|"XX"|""|"00"|"05"
"100"|"5720562944"|"1000"|"F"|"UB"|""|""|"L"|"20230118"|"84HD937J3J392H371842CAZEF91374923HDTAZ32"|"0001000003"|"AB01"|"USD"|"20230118"|"A1"|"S1"|"F"|"XX"|""|"00"|"05"
"100"|"8401817494"|"1000"|"F"|"UB"|""|""|"L"|"20230118"|"84HD937J3J392H371842CAZEF91374923HDTAZ32"|"0001000004"|"AB01"|"USD"|"20230118"|"A1"|"S1"|"F"|"XX"|""|"00"|"05"
我还尝试使用示例数据将 CSV 文件从存储帐户加载到 azure SQL 服务器,并收到类似的错误。
该错误可能由多种原因引起,例如:
为了解决此错误,我检查所有列的大小是否与传入数据一致,并且每列的数据类型也是否正确。并更改了
ROWTERMINATOR
= '
'.
BULK INSERT sample2
FROM 'csv1.csv'
WITH (DATA_SOURCE = 'MyAzureBlobStorage'
,FORMAT = 'CSV'
,FIELDTERMINATOR = '|'
,FIELDQUOTE = '"'
,ROWTERMINATOR = '\n'
,BATCHSIZE=100000
,TABLOCK
,FIRSTROW = 0
,CODEPAGE = '65001');
输出: