阿里云RDS表数据导出(同步)至AWS RedShift

  1. 利用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。
  2. 利用AWS S3(手动)

    该方式作为DataPipeline失效时(跨国线路故障等等…)的手动备用方案。

    1. 用MySQL客户端或任意方式将数据导出为CSV文件,不含header,CSV中字段顺序必须和表字段顺序一致

    2. 将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

    3. 用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';