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

Lui*_*ril 5 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)  |
Run Code Online (Sandbox Code Playgroud)

每个字段都在无错误的迁移,并且在我的目标DynamoDb表中(该LongDescription列除外)。这是因为它是一NVARCHAR(MAX)列。

根据文档:

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

  • 除非它是CLOB,否则AWS DMS不支持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       |
Run Code Online (Sandbox Code Playgroud)

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. 我无法使用compress T-SQL命令将LongDescription列存储为二进制,因为我的SQLServer版本是2014

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

无法将条目放入带有数据记录的表“ TestMigration_4”中,该记录具有源PK列“ SourceTableID”和值“ 123456”

Fab*_*ano 4

您可能需要检查此AWS 最佳实践页面,以在 DynamoDB 中存储大型项目/属性:

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

我实际上喜欢将您的数据保存在 S3 中并在 DynamoDB 中引用其标识符的想法LongDescription。我从未尝试过,但一个想法是使用他们的 DMS 功能创建多个迁移任务来执行此操作,甚至创建某种 ETL 解决方案作为最后手段,利用 DMS 的 CDC 功能。您可能需要与他们的支持团队联系以确保其有效。

希望能帮助到你!