Azure SQL 上出现 BULK INSERT 错误,但适用于 SQL Server

问题描述 投票:0回答:1

我目前面临将 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"
sql-server azure csv azure-sql-database bulkinsert
1个回答
0
投票

我还尝试使用示例数据将 CSV 文件从存储帐户加载到 azure SQL 服务器,并收到类似的错误。

enter image description here

该错误可能由多种原因引起,例如:

  • 行终止符或字段终止符不正确。
  • 表格列的大小不合适。

为了解决此错误,我检查所有列的大小是否与传入数据一致,并且每列的数据类型也是否正确。并更改了

ROWTERMINATOR
= ' '.

BULK INSERT sample2
FROM 'csv1.csv'
WITH (DATA_SOURCE = 'MyAzureBlobStorage'
        ,FORMAT = 'CSV' 
        ,FIELDTERMINATOR = '|' 
        ,FIELDQUOTE = '"'
        ,ROWTERMINATOR = '\n' 
        ,BATCHSIZE=100000 
        ,TABLOCK
        ,FIRSTROW = 0
        ,CODEPAGE = '65001');

输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.