配置Redshift数据源

更新时间:
复制为 MD 格式

通过数据迁移服务MMS(MaxCompute Migration Service)迁移数据前,需新增并启动Redshift数据源,确保数据源与MMS服务网络连通,并将Redshift的元数据同步至MMS服务,以便配置后续的迁移作业。

适用范围

  • 支持Amazon Redshift集群模式和Serverless模式。

  • 支持全量数据迁移。

迁移费用

MMS数据迁移会消耗各类资源从而产生费用,主要费用组成如下:

MMS操作

计费项

收费方

数据源运行过程(包括元数据同步)

计算费用:Redshift端执行系统表查询产生。

  • Redshift Serverless按查询量计费;

  • 集群模式消耗集群计算资源。

AWS Redshift

任务迁移数据过程

计算费用:MaxCompute端产生Spark作业消耗计算资源。

阿里云MaxCompute

Redshift UNLOADAmazon Simple Storage Service(S3)

存储费用:S3临时目录存储费用。

AWS

MaxComputeS3读取数据

流量费用:S3数据流出时产生。

AWS

迁移任务配置了"开启校验"

计算费用:在RedshiftMaxCompute分别执行校验SQL语句产生。

阿里云MaxComputeAWS Redshift

网络配置

网络费用

  • 若有网络专线则收取专线相关费用;

  • 若无网络专线,会产生数据流出AWS的流量费用。

专线提供方或阿里云网络

建议选择包年包月计算资源和数据传输独享资源来执行迁移作业,以降低迁移成本。

操作步骤

目标端MaxCompute项目已完成准备工作。

步骤一:准备外部数据源

Redshift端准备读取数据时,需要完成下表中的准备工作,详情及具体操作见下。

准备项

说明

Redshift集群或Serverless Workgroup

确认已创建并处于可用状态

JDBC连接地址

用于MMS连接Redshift

网络和安全组

确保MMS能够跨云访问Redshift

AWS Access Key

用于MaxCompute Spark读取S3临时数据

S3存储桶

存储迁移过程中的临时数据

IAM Role

授权Redshift通过UNLOAD写入S3,需关联到集群或命名空间

数据库用户权限

系统表读取、迁移表读取、S3写入权限

  1. 确保Redshift集群或Serverless Workgroup已创建并处于可用状态。

  2. 获取JDBC连接地址

    获取RedshiftJDBC连接地址,后续在MMS中新增数据源时需要填写。

    • 集群模式格式:jdbc:redshift://cluster-name.xxx.redshift.amazonaws.com:5439/

    • Serverless模式格式:jdbc:redshift://xxx.redshift-serverless.amazonaws.com:5439/

  3. 配置网络和安全组

    MMS是阿里云服务,跨云访问AWS Redshift,需确保网络连通性。

    以下为MMS通过公网访问(最简单的方式)AWS Redshift的示例:

    1. 确保Redshift已开启公开访问(Publicly accessible)。

    2. 将阿里云MMS的出口IP地址段添加到Redshift关联的安全组入站规则中。

    安全组入站规则示例(公网访问):

    类型

    端口

    源地址

    说明

    Redshift

    5439

    MMS出口IP

    允许MMS访问Redshift

    警告

    建议仅开放必要的IP地址段,避免使用0.0.0.0/0。

  4. 准备AWS Access Key

    准备具有S3读取权限的AWS Access Key IDSecret Access Key,用于MaxCompute Spark访问S3临时目录读取数据。

    所需最小权限如下:

    权限

    说明

    是否必需

    s3:GetObject

    读取S3临时目录中的数据文件

    必需

    s3:ListBucket

    列出S3存储桶中的对象

    必需

    最小权限策略示例:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::my-bucket",
            "arn:aws:s3:::my-bucket/*"
          ]
        }
      ]
    }
  5. 创建S3存储桶(临时目录)

    • 创建用于存储迁移过程中临时数据的S3存储桶。

    • 建议配置生命周期策略,自动清理临时数据以降低存储成本。

  6. 创建并关联IAM Role

    创建允许Redshift写入S3IAM Role,并将其关联到Redshift集群或Serverless配置中。

    重要

    IAM Role必须关联Redshift 集群或 Serverless 配置,否则UNLOAD操作会报错"The requested role is not associated to cluster"

    1. 所需S3权限

      权限

      说明

      是否必需

      s3:PutObject

      Redshift UNLOAD将数据导出到S3

      必需

      s3:GetObject

      Redshift读取S3数据

      必需

      s3:ListBucket

      spark-redshift查询存储桶内容

      必需

    2. 关联IAM RoleRedshift

      集群模式和Serverless模式的关联方式不同:

      集群模式

      1. 登录AWS Redshift控制台。

      2. 选择目标集群,单击操作(Actions)

      3. 单击管理IAM角色(Manage IAM roles)

      4. 选择创建的IAM Role,单击关联IAM角色(Associate IAM role),保存更改。

      Serverless模式

      1. 登录AWS Redshift控制台。

      2. 在左侧导航选择Redshift Serverless

      3. 选择命名空间(Namespaces),单击目标命名空间。

      4. 安全和加密(Security and encryption)选项卡中,找到权限(Permissions)

      5. 单击管理IAM角色(Manage IAM roles),添加创建的IAM Role,保存更改。

    3. IAM Role 配置示例

      • 信任关系策略(允许 Redshift 服务担任):

        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "redshift.amazonaws.com",
                  "redshift-serverless.amazonaws.com"
                ]
              },
              "Action": "sts:AssumeRole"
            }
          ]
        }
      • 最小权限策略(仅包含必需权限):

        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket"
              ],
              "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
              ]
            }
          ]
        }
  7. 数据库用户权限

    Redshift数据库用户需要具备以下权限:

    权限类型

    说明

    系统表读取权限

    访问pg_classpg_namespacepg_attributepg_typepg_constraintsvv_redshift_schemas等系统表的SELECT权限(普通用户默认拥有)

    表读取权限

    对要迁移表的SELECT权限

    S3写入权限

    通过IAM Role授权Redshift写入S3临时目录

步骤二:新增数据源

  1. 登录MaxCompute控制台,在左上角选择地域。

  2. 在左侧导航栏,选择数据传输 > 迁移服务

  3. 数据源页签,单击新增数据源

    在弹出的MaxCompute服务关联角色对话框中,单击确认,即可创建成功。若未自动弹出该对话框,则表明该角色已创建。

    新增数据源页面,配置数据源信息,然后单击新增,完成数据源创建。

    • 数据源基本信息

      参数名

      是否必填

      说明

      数据源名称

      数据源名称,可自定义,不能包含字符、数字、汉字之外的特殊字符。

      数据源类型

      选择Redshift

      网络连接

      选择需要使用的网络连接。

      网络连接在MaxCompute管理配置 > 网络连接 模块创建,用于MMSVPC通信,最终连接数据源。

      AWS Access Key ID

      AWS访问密钥ID。用于MaxCompute Spark访问S3临时目录读取迁移数据。获取方式请参见AWS IAM创建访问密钥

      AWS Secret Access Key

      AWS访问密钥。与Access Key ID共同使用,用于MaxCompute Spark访问S3临时目录。

      Redshift JDBC URL

      Redshift JDBC连接地址(不含数据库名和用户名密码)。格式:jdbc:redshift://endpoint:5439/

      • 集群模式示例:jdbc:redshift://cluster-name.xxx.redshift.amazonaws.com:5439/

      • Serverless模式示例:jdbc:redshift://xxx.redshift-serverless.amazonaws.com:5439/

      Redshift数据库名

      Redshift数据库名称。

      Redshift用户名

      Redshift数据库用户名。

      Redshift密码

      Redshift数据库密码。用于 MMS 连接 Redshift 获取元数据(表结构、列信息、约束等)和执行 UNLOAD 操作导出数据到 S3。

      S3临时目录区域

      S3 临时目录所在的 AWS Region。显式指定可避免跨区域问题和自动发现延迟。示例:us-east-1us-west-2

      S3 临时目录

      spark-redshift 使用的 S3 临时目录,用于存储 UNLOAD 出来的临时数据。

      格式:s3a://bucket/path/。迁移完成后可配置 S3 生命周期策略自动清理临时数据。

      AWS IAM Role

      Redshift 写入 S3 使用的 IAM Role。Redshift 使用此角色将数据 UNLOAD 到 S3 临时目录。

      格式:arn:aws:iam::account-id:role/role-name

      创建方式请参见 AWS IAM 创建角色Redshift UNLOAD 文档

      默认目标MaxCompute项目

      数据迁移时选择映射的目标项目,不可修改。

      目标MaxCompute项目列表

      若一个数据源的数据需要迁移到多个目标项目,需配置目标MaxCompute项目列表。

      MaxCompute执行迁移作业的项目

      迁移过程中,执行在MaxCompute上发起的Spark、SQL等迁移作业的项目,并使用该项目关联的默认计算Quota。

    • 其他信息

      以下参数均为可选,根据需要填写。

      单击展开查看参数详情

      参数名

      说明

      Metastore定时更新

      数据源元数据是否定时拉取。

      • 启用:定时拉取,更新周期支持每天和每小时,支持配置更新开始时间。

        • 每日更新:定时器每天运行一次,运行时刻为选定的24小时内的某一时间(精确到分钟)。

        • 每小时更新:定时器每小时运行一次,运行时刻为选定的60分钟内的某一分钟。

      • 禁用:不定时拉取。

      Metastore访问并发量

      访问MetaStore的并发量,默认为3。

      Schema白名单

      需要迁移的 Schema,多个值之间以半角逗号(,)分隔。

      Schema黑名单

      不需要迁移的 Schema,多个值之间以半角逗号(,)分隔。

      表黑名单

      不需要迁移的 Redshift 数据表。单个表的格式为 schema.tabletable,多个表之间以半角逗号(,)分隔。

      表白名单

      需要迁移的 Redshift 数据表。单个表的格式为 schema.tabletable,多个表之间以半角逗号(,)分隔。

      数据搬迁任务最大并发量

      MMS最大迁移任务的并发量。过大的并发量可能造成源端负载压力过大。默认20。

      MaxCompute迁移任务sql参数

      SQL参数。参考 Flag参数列表

      表名字符转换配置

      格式为JSON,如 {"%": "_"}

      用于将源表里的特殊字符映射为MaxCompute支持的字符。

      列名字符转换配置

      单个任务处理的最多分区数量

      默认50。即一次MMA任务迁移的分区数量,通过批量的分区迁移,可以减少提交SQL的次数,节约SQL提交时间。一般不需要修改。

      单个任务处理的最大数量(单位G)

      默认5G。一般不需要修改。

      分区特殊字符映射

      格式为JSON,如 {"/": "_"}

      用于将源分区值中的特殊字符映射为MaxCompute支持的字符。

步骤三:同步元数据

数据源启动后会生成一个作业实例,实现数据源与MMS服务的连接,再将源数据同步至MMS服务,以便配置后续迁移作业。

说明
  • 该作业实例会占用4 CU计算资源。当数据源无任何等待运行或正在运行的迁移作业或元数据同步作业时,系统会关闭数据源,使用时需再次启动。

  • Redshift Serverless模式:元数据同步会查询 Redshift 系统表,产生查询费用。建议合理配置元数据定时更新周期以控制成本。

  1. 数据源页签,单击目标数据源对应的操作列的更新元数据

  2. 数据源页签,可以查看目标数据源的运行状态

  3. 若数据源的元数据存在变动,且启用了元数据定时更新,系统会按照配置的时间定时更新,无需手动进行元数据同步操作。

外部数据源配置完成后,创建迁移作业

支持的数据类型

重要
  • Redshift时间范围(4713 BC ~ 294276 AD)远大于MaxCompute(1 AD ~ 9999 AD)。

  • HLLSKETCH类型不支持迁移,包含此类型列的表无法迁移,需移除该列或使用其他近似去重方案。

数值类型

Redshift

别名

MaxCompute

兼容性

SMALLINT

INT2

SMALLINT

兼容

INTEGER

INT, INT4

INT

兼容

BIGINT

INT8

BIGINT

兼容

DECIMAL(p,s)

NUMERIC

DECIMAL(p,s)

兼容

REAL

FLOAT4

FLOAT

兼容

DOUBLE PRECISION

FLOAT8, FLOAT

DOUBLE

兼容

字符类型

Redshift

别名

MaxCompute

兼容性

CHAR(n)

CHARACTER, NCHAR

STRING

兼容

VARCHAR(n)

CHARACTER VARYING

STRING

兼容

TEXT

-

STRING

兼容

日期时间类型

Redshift

格式/说明

MaxCompute

备注

DATE

yyyy-mm-dd

DATE

-

TIME

无时区

STRING

MC 无 TIME 类型,转为字符串

TIMETZ

带时区

STRING

转为字符串

TIMESTAMP

无时区

TIMESTAMP_NTZ

MC 精度到纳秒

TIMESTAMPTZ

带时区

TIMESTAMP

MC 精度到纳秒

其他类型

Redshift

说明

MaxCompute

备注

BOOLEAN

布尔类型

BOOLEAN

兼容

SUPER

JSON 超集类型

STRING

转为String

VARBYTE(n)

二进制,最大 16MB

BINARY

MC 最大 8MB

GEOMETRY

空间数据

STRING

转为String

GEOGRAPHY

地理数据

STRING

转为String,可用MC函数转为地理数据

使用限制

限制项

Redshift

MaxCompute

影响

HLLSKETCH类型

支持

不支持

包含此类型列的表无法迁移,需移除该列或使用其他近似去重方案

VARBYTE长度

最大16 MB

最大8 MB

8 MB需处理

列数量

1,600

1,200

超出列数限制的表需拆分

自增列

支持IDENTITY

不支持

迁移时丢失自增属性

常见问题

连接问题排查

  1. JDBC连接失败

    • 检查网络连接是否正确配置。

    • 确认JDBC URL格式正确。

    • 验证用户名和密码是否正确。

  2. S3访问权限问题

    • 确认AWS Access KeyS3读取权限。

    • 确认IAM Role已正确关联到Redshift集群或Serverless命名空间。

    • 检查S3存储桶策略是否允许访问。

性能优化建议

  1. S3临时目录区域

    • 建议将S3临时目录创建在与Redshift同一区域,避免跨区域数据传输。

    • 显式配置redshift.tempdir.region参数,避免自动发现延迟。

  2. S3生命周期策略

    • 建议为S3临时目录配置生命周期策略,自动清理过期数据。

    • 可设置7天后自动删除临时文件。