如何使用AWS Glue ETL任务完成DocumentDB到Redshift的数据迁移
DocumentDB 到 Redshift 完整迁移同步执行步骤
前置检查(已完成DocumentDB到S3导出的前提下)
- 确认S3上的导出文件格式为Redshift支持的JSON、CSV、Parquet格式,若导出为BSON格式需先完成格式转换,嵌套层级超过3层的结构建议提前做扁平化处理,降低后续导入报错概率
- 确认Redshift集群绑定的IAM角色已配置S3桶的
s3:GetObject、s3:ListBucket权限,同时当前操作账号拥有Redshift的表创建、数据写入权限
全量数据导入Redshift操作
- 第一步:根据DocumentDB的文档结构创建Redshift目标表,如需存储嵌套结构可使用Redshift的SUPER类型,示例如下:
CREATE TABLE user_info ( _id VARCHAR(100) PRIMARY KEY, user_name VARCHAR(255), user_age INT, ext_info SUPER, -- 存储嵌套字段 create_time TIMESTAMP );
- 第二步:执行COPY命令导入S3数据,以JSON格式导入为例:
COPY user_info FROM 's3://你的桶名称/导出文件存放路径/' IAM_ROLE 'arn:aws:iam::你的AWS账号ID:role/你的Redshift访问S3的角色名' FORMAT AS JSON 'auto' REGION '你的AWS区域编码(如cn-north-1)' TIMEFORMAT 'auto' TRUNCATECOLUMNS BLANKSASNULL EMPTYASNULL;
如果导出文件为Parquet格式,只需将FORMAT参数替换为FORMAT AS PARQUET即可
增量持续同步配置
如果需要实现数据的持续同步而非一次性迁移,需按如下步骤配置:
- 调整DocumentDB到S3的导出链路:开启DocumentDB变更流(Change Streams),定时拉取新增/变更/删除的文档数据,按时间分区写入S3的增量目录(例如
s3://你的桶名称/incremental/yyyyMMdd/hh/) - 配置Redshift增量导入任务:可通过定时Lambda、AWS Glue作业或者Redshift自带的定时任务,按固定时间间隔执行COPY命令,将对应时间分区的增量数据导入到Redshift目标表,如有删除操作需额外关联主键执行DELETE语句完成数据对齐
一致性校验与常见问题排查
- 全量导入完成后,分别统计DocumentDB全量文档数与Redshift目标表行数,核对数值一致;抽样抽取至少3%的记录,对比两端字段值完全匹配
- 增量同步运行后,定期核对两端最近24小时内的新增、变更数据,确认同步延迟符合预期
导入报错时可查询Redshift系统表
stl_load_errors获取具体错误原因,常见问题包含字段类型不匹配、JSON格式异常、IAM权限不足三类
嵌套结构导入异常时,可优先使用SUPER类型存储,或者提前通过ETL任务将嵌套字段全部扁平化后再执行导入
内容的提问来源于stack exchange,提问作者aditya Damera
相关产品推荐
相关产品推荐

