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的源数据类型
Run Code Online (Sandbox Code Playgroud)|SQL Server Data Types|AWS DMS Data Types| |----------------------------------------| |NVARCHAR (max) |NCLOB, TEXT |
https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html
根据我的任务配置,会发生以下两种情况:
LongDescription
列的信息已正确迁移到DynamoDb,但是文本被截断了LongDescription
列信息未正确迁移到DynamoDb如何NVARCHAR(MAX)
在不丢失任何数据的情况下将列正确迁移到DynamoDb?谢谢!
进度报告
将Amazon S3用作目标的限制
- 不支持完全LOB模式。
https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html
我无法使用compress T-SQL命令将LongDescription
列存储为二进制,因为我的SQLServer版本是2014
我试图将迁移任务运行到受限LOB模式,并使用最大字节大小作为限制。我的最大字节大小为45155996,所以我将46000KB设置为限制。这将导致以下错误:
无法将条目放入带有数据记录的表“ TestMigration_4”中,该记录具有源PK列“ SourceTableID”和值“ 123456”
您可能需要检查此AWS 最佳实践页面,以在 DynamoDB 中存储大型项目/属性:
如果您的应用程序需要在一项中存储的数据多于 DynamoDB 大小限制所允许的数据,您可以尝试压缩一个或多个大型属性或将该项分解为多个项(通过排序键有效索引)。您还可以将项目作为对象存储在 Amazon Simple Storage Service (Amazon S3) 中,并将 Amazon S3 对象标识符存储在 DynamoDB 项目中。
我实际上喜欢将您的数据保存在 S3 中并在 DynamoDB 中引用其标识符的想法LongDescription
。我从未尝试过,但一个想法是使用他们的 DMS 功能创建多个迁移任务来执行此操作,甚至创建某种 ETL 解决方案作为最后手段,利用 DMS 的 CDC 功能。您可能需要与他们的支持团队联系以确保其有效。
希望能帮助到你!