gpt4 book ai didi

sql-server - 从 Sqlite 向 SQL Server 读取大量数据在执行前失败

转载 作者:行者123 更新时间:2023-12-03 17:51:48 24 4
gpt4 key购买 nike

我有一个巨大的(26GB)sqlite 数据库,我想用 SSIS 将它导入 SQL Server。

我已经正确设置了一切。一些数据流工作正常并正在导入数据。

数据流很简单。它们仅由源和目标组成。

但是当涉及到一个有 8000 万行的表时,数据流会失败并显示以下无用的消息:

Code: 0xC0047062
Source: Data Flow Task Source 9 - nibrs_bias_motivation [55]
Description: System.Data.Odbc.OdbcException (0x80131937): ERROR [HY000] unknown error (7)

at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
at System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Odbc.OdbcCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
at Microsoft.SqlServer.Dts.Pipeline.DataReaderSourceAdapter.PreExecute()
at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPreExecute(IDTSManagedComponentWrapper100 wrapper)



在此任务失败之前,内存使用率上升到 99%,然后任务失败。这让我认为这是一个内存问题。但我不知道我该如何解决这个问题。

我尝试设置 DelayValidation在所有数据流任务上为 true。没有改变。
我玩过缓冲区大小。没有。

我能做些什么?

最佳答案

分步指南

由于从大数据集读取时会抛出错误,因此请尝试按 block 读取数据,以实现您可以按照以下步骤操作:

  • 声明 Int32 类型的 2 个变量( @[User::RowCount]@[User::IncrementValue] )
  • 添加 Execute SQL Task执行 select Count(*)命令并将结果集存储到变量 @[User::RowCount]

  • enter image description here

    enter image description here
  • 添加具有以下首选项的 For 循环:

  • enter image description here
  • 在 for 循环容器内添加 Data flow task
  • 在数据流任务中添加 ODBC SourceOLEDB Destination
  • 在 ODBC 源中选择 SQL Command选项并写一个SELECT * FROM TABLE查询 *(仅检索元数据`
  • 映射源和目标之间的列
  • 返回 Control flow并点击Data flow task并按 F4 查看属性窗口
  • 在属性窗口中,转到表达式并将以下表达式分配给 [ODBC Source].[SQLCommand]属性:(更多信息请参阅How to pass SSIS variables in ODBC SQLCommand expression?)
    "SELECT * FROM MYTABLE ORDER BY ID_COLUMN
    LIMIT 500000
    OFFSET " + (DT_WSTR,50)@[User::IncrementValue]"

  • 在哪里 MYTABLE是源表名, IDCOLUMN是您的主键或身份列。

    控制流截图

    enter image description here

    引用
  • ODBC Source - SQL Server
  • How to pass SSIS variables in ODBC SQLCommand expression?
  • HOW TO USE SSIS ODBC SOURCE AND DIFFERENCE BETWEEN OLE DB AND ODBC?
  • SQLite Limit
  • 关于sql-server - 从 Sqlite 向 SQL Server 读取大量数据在执行前失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54168322/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com