从 SSMS 将平面文件导入 Azure SQL 时出错

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

我正在尝试将 CSV 导入到我们的 Azure SQL 数据库中。我正在使用 SSMS,并通过右键单击数据库开始导入,选择任务和导入数据。共有51k条记录,整个文件约56M。它导入了 36k 条记录,然后出错了。

当我执行这些操作时,通常是一些奇怪的字符导致了问题,所以我跳过记录并继续。为了安全起见,我删除了所有已完成的加 10。生成的文件是 14M 和 15k 记录。当我尝试导入剩余记录时,我收到以下错误:

Messages
Error 0xc0202009: Data Flow Task 1: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 11.0"  Hresult: 0x80004005  Description: "The service has encountered an error processing your request. Please try again. Error code 4896.".
 (SQL Server Import and Export Wizard)
 
Error 0xc0209029: Data Flow Task 1: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  The "Destination - raw_order_master2.Inputs[Destination Input]" failed because error code 0xC020907B occurred, and the error row disposition on "Destination - raw_order_master2.Inputs[Destination Input]" specifies failure on error. An error occurred on the specified object of the specified component.  There may be error messages posted before this with more information about the failure.
 (SQL Server Import and Export Wizard)
 
Error 0xc0047022: Data Flow Task 1: SSIS Error Code DTS_E_PROCESSINPUTFAILED.  The ProcessInput method on component "Destination - raw_order_master2" (806) failed with error code 0xC0209029 while processing input "Destination Input" (819). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running.  There may be error messages posted before this with more information about the failure.
 (SQL Server Import and Export Wizard)

Quick google 表明一个常见的问题是内存不足。 我的 SSD 驱动器上有 Windows 11、124GB 空闲空间和 64GB 内存,根据 TaskMgr 有 67% 空闲。

所以我不认为这是问题所在,但错误非常模糊,我不知道它可能是什么。我希望有人可能有一些其他的建议。

sql sql-server azure ssms
1个回答
0
投票

您可以尝试从文件系统中查询 *.csv 文件,而无需通过

OPENROWSET...
将其加载到数据库中,然后分析数据。

这里是一个以管道作为分隔符的文件的概念性示例。

实用提示:

  • 在分析时,您可以通过两个参数控制行范围: FIRSTROWLASTROW.
  • 您可以从所有列开始,如
    xsi:type="SQLVARYCHAR"
    格式化文件,稍后修改以匹配中的真实数据类型 目的地表。
  • 使用 'input.err' 文件查看和分析记录的错误。

XML 格式文件(SQL Server)

SQL

SELECT *
FROM  OPENROWSET(BULK 'e:\Temp\input.csv'
   , FORMATFILE = 'e:\Temp\input_format.xml'  
   , ERRORFILE = 'e:\Temp\input.err'
   , FIRSTROW = 2 -- real data starts on the 2nd row
   , LASTROW = 3 -- real data up to that row
   , MAXERRORS = 100
   ) AS tbl;

输入.csv

"ID"|"Name"|"Color"|"LogDate"|"Unknown"
41|Orange|Orange|2018-09-09 16:41:02.000|
42|Cherry, Banana|Red,Yellow||
43|Apple|Yellow|2017-09-09 16:41:02.000|

input_format.xml

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <RECORD>
      <FIELD ID="1" xsi:type="CharTerm" TERMINATOR='|' MAX_LENGTH="70"/>
      <FIELD ID="2" xsi:type="CharTerm" TERMINATOR='|' MAX_LENGTH="70" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="3" xsi:type="CharTerm" TERMINATOR='|' MAX_LENGTH="70" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="4" xsi:type="CharTerm" TERMINATOR='|' MAX_LENGTH="70" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="5" xsi:type="CharTerm" TERMINATOR='\r\n' MAX_LENGTH="70" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
   </RECORD>
   <ROW>
      <COLUMN SOURCE="1" NAME="ID" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="3" NAME="Color" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="4" NAME="LogDate" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="5" NAME="Unknown" xsi:type="SQLVARYCHAR"/>
   </ROW>
</BCPFORMAT>
© www.soinside.com 2019 - 2024. All rights reserved.