云数据库RDS提供无感数据集成(Zero-ETL)功能,用于将RDS数据同步至数据仓库(AnalyticDB MySQL、AnalyticDB PostgreSQL或ClickHouse),您无需搭建或维护数据同步链路,且数据同步链路不收费,减少数据传输成本和运维成本。
支持地域
华北2(北京)、华东1(杭州)、华东2(上海)和华南1(深圳)
后续将支持更多地域,具体以RDS控制台为准。
方案概述
在大数据时代,企业面临着大量分散在不同的系统和平台上的业务数据,为了有效地管理和利用这些数据,企业往往需要依赖于ETL工具对数据进行集中式管理。
ETL是将上层业务系统的数据经过提取(Extract)、转换清洗(Transform)、加载(Load)到数据仓库的处理过程。其目的是整合散布于不同源头的数据到目标端数仓,通过在数仓中做进一步的计算分析,为业务做出有效的商业决策。
传统的ETL流程通常会面临以下挑战:
系统复杂度增加:用户需要自行维护ETL工具,增加了运维难度,无法专注于业务应用的开发。
资源成本增加:不同的数据源可能需要不同的ETL工具,搭建ETL链路会产生额外的资源成本。
数据实时性降低:部分ETL流程涉及周期性的批量更新,在近实时的应用场景中,无法快速产生分析结果。
为了解决这些问题,阿里云瑶池数据库提供了无感数据集成(Zero-ETL)功能,可以快速构建业务系统(OLTP)和数据仓库(OLAP)之间的数据同步链路,将业务系统(OLTP)的数据自动提取、转换清洗和加载到数据仓库(OLAP),从而一站式完成数据同步和管理,实现事务处理和数据分析一体化,帮助客户专注于数据分析业务。
功能优势
简单易用:用户无需创建和维护执行ETL(提取、转换、加载操作)的复杂数据管道,仅需选择源端数据和目标端实例,自动创建实时数据同步链路,减少构建和管理数据管道所带来的挑战,专注于上层应用开发。
零成本:Zero-ETL链路不额外收费,可免费实现在数据仓库中对上游数据进行分析。
多源汇聚:通过Zero-ETL链路将多个实例中的数据实时同步至一个AnalyticDB MySQL集群、AnalyticDB PostgreSQL实例或ClickHouse实例中,构建全局分析视角。
说明多个实例中的数据实时同步至一个ClickHouse实例,仅支持不同任务之间的同步对象不重叠。
支持链路
RDS MySQL->ClickHouse
RDS MySQL->AnalyticDB MySQL 3.0
RDS MySQL->AnalyticDB PostgreSQL
费用说明
无感数据集成(Zero-ETL)同步链路免费。
前提条件
已创建源实例RDS MySQL。如需创建,请参见快速创建RDS MySQL实例。
已创建目标实例ClickHouse、AnalyticDB MySQL数仓版集群或AnalyticDB PostgreSQL实例。如需创建,请参见创建ClickHouse实例、创建AnalyticDB MySQL数仓版集群、创建AnalyticDB PostgreSQL实例。
源实例和目标实例需在同一地域。
已为RDS MySQL和目标库创建数据库账号。具体操作创建RDS MySQL账号、创建ClickHouse账号、创建AnalyticDB MySQL集群账号、创建AnalyticDB PostgreSQL数据库账号。
准备工作
创建服务关联角色并授予RAM用户对应的管理权限。
RDS MySQL->ClickHouse
创建服务关联角色AliyunServiceRoleForClickHouseZeroETL。
说明在创建链路进行配置,并单击数据库实例ID下拉列表项时,会有弹窗报错提示创建服务关联角色AliyunServiceRoleForClickHouseZeroETL(如下图),无需手动创建,系统会自动创建该角色。
授予RAM用户管理权限。
RAM用户必须具备以下三种权限,才可以成功创建Zero链路。具体操作,请参见创建自定义权限策略。
源端RDS MySQL权限:AliyunRDSFullAccess。
目标端ClickHouse权限:ClickHouse的自定义策略脚本如下。
{ "Version": "1", "Statement": [ { "Action": "clickhouse:*", "Resource": "*", "Effect": "Allow" }, { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": "clickhouse.aliyuncs.com" } } } ] }
DTS的权限:DTS的自定义策略脚本如下。
{ "Version": "1", "Statement": [ { "Action": "dts:*", "Resource": "*", "Effect": "Allow" }, { "Action": "ram:PassRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "acs:Service": "dts.aliyuncs.com" } } } ] }
RDS MySQL->AnalyticDB MySQL 3.0
创建服务关联角色AliyunServiceRoleForAnalyticDBForMySQL。
前往RAM控制台并选择左侧导航栏的角色列表。检查角色列表中,是否已存在名为AliyunServiceRoleForAnalyticDBForMySQL的服务关联角色。若不存在,则需创建相关角色。
单击左上角创建角色。
在弹出的创建角色对话框中,选择阿里云服务,并单击下一步。
选择角色类型为服务关联角色,并选择AnalyticDB MySQL。
单击完成,返回角色列表,确保已成功创建服务关联角色。
授予RAM用户管理权限。
RAM用户支持为所有或指定RDS MySQL实例和AnalyticDB MySQL集群授权。具体操作,请参见创建自定义权限策略。
自定义权限策略的脚本如下:
为所有RDS MySQL和AnalyticDB MySQL集群授权
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "dts:*", "Resource": [ "acs:adb:*:*:*", "acs:rds:*:*:*" ] }, { "Effect": "Allow", "Action": [ "dts:DescribeRegions", "dts:DescribeConfigRelations", "dts:DescribeSrcLinkConfig", "dts:DescribeDestLinkConfig", "dts:DescribeLinkConfig", "dts:DescribeConciseJobStatics", "dts:ListUserAuthorizationLogs", "dts:CreateUserAuthorization" ], "Resource": [ "acs:dts:*:*:*" ] } ] }
为指定RDS MySQL和AnalyticDB MySQL集群授权
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "dts:*", "Resource": [ "acs:adb:*:*:dbcluster/am-2zeod8ax4b9a****", 替换为需要同步的AnalyticDB MySQL集群ID "acs:rds:*:*:dbinstance/rm-2ze6fs8ouh43****" 替换为需要同步的RDS MySQL实例ID ] }, { "Effect": "Allow", "Action": [ "dts:DescribeRegions", "dts:DescribeConfigRelations", "dts:DescribeSrcLinkConfig", "dts:DescribeDestLinkConfig", "dts:DescribeLinkConfig", "dts:DescribeConciseJobStatics", "dts:ListUserAuthorizationLogs", "dts:CreateUserAuthorization" ], "Resource": "acs:dts:*:*:*" } ] }
RDS MySQL->AnalyticDB PostgreSQL
创建服务关联角色AliyunServiceRoleForADBPG。
前往RAM控制台并选择左侧导航栏的角色列表。检查角色列表中,是否已存在名为AliyunServiceRoleForADBPG的服务关联角色。若不存在,则需创建相关角色。
单击左上角创建角色。
在弹出的创建角色对话框中,选择阿里云服务,并单击下一步。
选择角色类型为服务关联角色,并选择AnalyticDB PostgreSQL。
单击完成,返回角色列表,确保已成功创建服务关联角色。
授予RAM用户管理权限。
RAM用户支持为所有或指定RDS MySQL实例和AnalyticDB PostgreSQL实例授权。具体操作,请参见创建自定义权限策略。
自定义权限策略的脚本如下:
为所有RDS MySQL和AnalyticDB PostgreSQL实例授权
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "dts:*", "Resource": [ "acs:gpdb:*:*:*", "acs:rds:*:*:*" ] }, { "Effect": "Allow", "Action": [ "dts:DescribeRegions", "dts:DescribeConfigRelations", "dts:DescribeSrcLinkConfig", "dts:DescribeDestLinkConfig", "dts:DescribeLinkConfig" ], "Resource": [ "acs:gpdb:*:*:*" ] } ] }
为指定RDS MySQL和AnalyticDB PostgreSQL实例授权
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "dts:*", "Resource": [ "acs:gpdb:*:*:dbinstanc/gp-bp1a740l3zx4****", 替换为需要同步的AnalyticDB PostgreSQL实例ID "acs:rds:*:*:dbinstance/rm-2ze6fs8ouh43****" 替换为需要同步的RDS MySQL实例ID ] }, { "Effect": "Allow", "Action": [ "dts:DescribeRegions", "dts:DescribeConfigRelations", "dts:DescribeSrcLinkConfig", "dts:DescribeDestLinkConfig", "dts:DescribeLinkConfig" ], "Resource": "acs:dts:*:*:*" } ] }
操作步骤
登录RDS管理控制台,单击左侧导航栏数据集成。
在无感数据集成 (Zero-ETL)页签,单击创建Zero-ETL任务。
在创建Zero-ETL任务页面配置源库信息和目标库信息。
配置源库信息:
源库信息
说明
任务名称
Zero-ETL任务名称。
数据库类型
选择RDS MySQL
接入方式
仅支持云实例接入。
实例地区
选择源实例所属地域。
实例ID
RDS MySQL实例ID。
数据库名称
RDS MySQL实例数据库名称。
数据库账号
RDS MySQL实例的数据库账号。
数据库密码
RDS MySQL数据库账号的密码。
连接方式
连接RDS MySQL实例的方式。包括非加密链接和SSL安全链接。
说明如果设置为SSL安全连接,您需要提前开启RDS MySQL实例的SSL加密功能,详情请参见使用云端证书快速开启SSL链路加密。
配置目标库信息:
目标库信息
说明
数据库类型
当前目标库支持AnalyticDB MySQL 3.0、AnalyticDB PostgreSQL和ClickHouse。
接入方式
仅支持云实例接入。
实例地区
目标库所属的地域。
实例ID
目标库的实例ID。
数据库账号
目标库实例的数据库账号。
数据库密码
目标库实例的数据库账号的密码。
上述参数配置完成后,单击测试连接以进行下一步,进入配置Zero-ETL页面,配置如下参数:
配置项目
说明
同步类型
实现数据源之间的数据实时同步。
同步类型分为:库表结构同步、全量同步、增量同步。
说明同步任务固定勾选增量数据同步,将源库产生的增量数据实时同步至目标库。
不需要增量同步时,请使用数据迁移。
实例级别选择所需同步的DDL和DML
勾选所需同步的DML操作(insert、update和delete)和DDL操作(create、alter、drop、rename和truncate),默认全部勾选。
源库对象和已选择对象
数据库中源库对象和同步对象。
高级配置(选填)
设置源库、目标库无法连接后的重试时间和源库、目标库出现其他问题后的重试时间。
上述参数配置完成后,单击配置库表字段,配置信息如下:
库表字段配置
说明
数据库名称
选择已有的数据库。
表名称
选择已有的数据表。
主键列
已选数据表中的主键所在字段。
分布键
已选数据表中的分布键所在字段。
类型
数据表类型,包括分区表和复制表。
定义状态
定义完库表字段配置状态后,即从未定义变为已定义。
配置完上述所有参数后,单击下一步保存任务并预检查。
预检查通过,单击启动,启动Zero-ETL任务。
您可以在免费数据同步页面,查看目标Zero-ETL任务的名称、源/目标、运行状态等信息。