AWS DMS(数据库迁移服务)完整的LOB不适用于SQL Server

时间:2019-09-16 17:40:07

标签: sql-server amazon-web-services amazon-dynamodb aws-dms

我正在尝试将使用AWS DMS的SQL Server表迁移到DynamoDb目标。 表结构如下:

|SourceTableID|Title      |Status|Display|LongDescription|
|-------------|-----------|------|-------|---------------|
|VARCHAR(100) |VARCHAR(50)|INT   |BIT    |NVARCHAR(MAX)  |

LongDescription列外,所有字段都在无错误地迁移并且出现在我的目标DynamoDb表中。这是因为它是NVARCHAR(MAX)列。

根据文档:

  

使用DynamoDB作为目标时,存在以下限制:

     
      
  • AWS DMS除非是CLOB,否则不支持LOB数据。 AWS DMS转换   迁移数据时,将CLOB数据转换为DynamoDB字符串。
  •   

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.DynamoDB.html

  

SQL Server的源数据类型

|SQL Server Data Types|AWS DMS Data Types|
|----------------------------------------|
|NVARCHAR (max)       |NCLOB, TEXT       |

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html

根据我的任务配置,会发生以下两种情况:

  • 有限的LOB模式: LongDescription列的信息已正确迁移到DynamoDb,但是文本被截断了
  • 完全LOB模式: LongDescription列的信息未正确迁移到DynamoDb

如何在不丢失任何数据的情况下将NVARCHAR(MAX)列正确迁移到DynamoDb? 谢谢!

进度报告

  1. 我已经尝试了迁移到S3目标。但是看起来S3不支持Full LOB
      

    使用Amazon S3作为目标的限制

         
        
    • 不支持全LOB模式。
    •   

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html

  1. 由于我的SQLServer版本是2014,所以我无法使用compress T-SQL命令将LongDescription列存储为二进制文件

  2. 我试图将迁移任务运行为受限LOB模式,并使用最大字节大小作为限制。我的最大字节大小为45155996,所以我将46000KB设置为限制。这将导致如下错误:

  

无法将项目放入带有数据记录且源PK列为“ SourceTableID”且值为“ 123456”的表“ TestMigration_4”中

1 个答案:

答案 0 :(得分:4)

您可能要检查此AWS' best practices页以在DynamoDB中存储大项目/属性:

  

如果您的应用程序需要在一个项目中存储超出DynamoDB大小限制所允许的数据,则可以尝试压缩一个或多个大属性或将该项目拆分为多个项目(通过排序键有效地索引)。您还可以将项目作为对象存储在Amazon Simple Storage Service(Amazon S3)中,并将Amazon S3对象标识符存储在DynamoDB项目中。

我实际上很喜欢将LongDescription保存在S3中并在DynamoDB中引用其标识符的想法。我从未尝试过,但是有一个主意是利用他们的DMS功能来创建multiple migration tasks来执行此操作,或者甚至利用DMS的CDC功能来创建某种ETL解决方案。您可能需要与他们的支持团队联系,以确保它可以正常工作。

希望有帮助!