利用DataPipeline(自动)
在AWS页面上按照指示创建一个DataPipeline任务,选择模板:”Full copy of RDS MySQL table to RedShift” 或者 “Incremental copy of RDS MySQL table to RedShift”,按照表格提示的参数填写即可。
注意事项:阿里的RDS要填公网DNS地址,并且开放白名单;
DataPipeline会将RDS数据先Stage到 S3上,选择的S3要和RedShift在同一个区域;
如果选择增量拷贝,需要表包含一个Last Modified Column字段;
S3toRedShift这个流程需要手动设置COPY的command option:
* **CSV DELIMITER ',' COMPUPDATE OFF dateformat 'auto' ACCEPTANYDATE IGNOREBLANKLINES**
- DataPipeline在执行时会启动一个EC2来跑任务,跑完默认2小时之后这个EC2会自动terminate,期间如果有错误可以根据错误提示修复,再立即手动Rerun出错的步骤,后续步骤会在出错步骤成功后满足其dependency自动执行,不需要重开一个EC2。
利用AWS S3(手动)
该方式作为DataPipeline失效时(跨国线路故障等等…)的手动备用方案。
用MySQL客户端或任意方式将数据导出为CSV文件,不含header,CSV中字段顺序必须和表字段顺序一致!
将CSV文件上传至AWS S3;
用psql连接RedShift,连接命令格式:
$ psql -h [Endpoint] -U [UserName] -d [DatabaseName] -p 5439_
例如:_
psql -h ****.****.us-west-2.redshift.amazonaws.com -U user -d database -p 5439
_用psql连接后执行以下命令即可:
COPY [TableName] FROM 's3://[BucketName]/path/to/data.csv' CREDENTIALS 'aws_access_key_id=[S3_ACCESS_KEY];aws_secret_access_key=[S3_SECRET_KEY]' CSV delimiter ',' dateformat 'auto';