我正在尝试将使用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
根据我的任务配置,会发生以下两种情况:
LongDescription
列的信息已正确迁移到DynamoDb,但是文本被截断了LongDescription
列的信息未正确迁移到DynamoDb 如何在不丢失任何数据的情况下将NVARCHAR(MAX)
列正确迁移到DynamoDb?
谢谢!
进度报告
使用Amazon S3作为目标的限制
- 不支持全LOB模式。
https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html
由于我的SQLServer版本是2014,所以我无法使用compress T-SQL命令将LongDescription
列存储为二进制文件
我试图将迁移任务运行为受限LOB模式,并使用最大字节大小作为限制。我的最大字节大小为45155996,所以我将46000KB设置为限制。这将导致如下错误:
无法将项目放入带有数据记录且源PK列为“ SourceTableID”且值为“ 123456”的表“ TestMigration_4”中
答案 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解决方案。您可能需要与他们的支持团队联系,以确保它可以正常工作。
希望有帮助!