从MYSQL迁移数据到华为云数据仓库服务经验总结

lixinlong 发表于 2018/05/17 11:20:29 2018/05/17
【摘要】 数据仓库服务(Data Warehouse Service,简称DWS)基于华为FusionInsight LibrA企业级数据仓库内核,提供即开即用、可扩展且完全托管的分析型数据库服务。用户开通数据仓库服务后,往往需要从其他关系数据库迁移数据,本人最近使用数据迁移服务在将MYSQL上的数据迁移到华为云数据仓库服务,进行一下总结。我的需求是首先将存储在MYSQL上的部分表历史数据一次性全部迁...

数据仓库服务(Data Warehouse Service,简称DWS)基于华为FusionInsight LibrA企业级数据仓库内核,提供即开即用、可扩展且完全托管的分析型数据库服务。用户开通数据仓库服务后,往往需要从其他关系数据库迁移数据,本人最近使用数据迁移服务在将MYSQL上的数据迁移到华为云数据仓库服务,进行一下总结。

我的需求是首先将存储在MYSQL上的部分表历史数据一次性全部迁移到数仓,然后希望每天将MYSQL上的交易、日志表信息增量同步到数仓。数据迁移服务提供了图形化向导式界面,支持从主流关系数据库、HBase、对象存储、文件系统等数据源迁移到数仓。


创建数据迁移服务集群

使用数据迁移服务首先需要创建一个集群,集群秒级创建成功,费用按运行时和关机两种情况进行不同计费,没有迁移任务时,可以选择关机(后面版本可以自动关机)。创建集群成功后,点击作业管理可以创建连接和迁移作业。

创建集群.GIF

 

创建连接

从MYSQL迁移到数仓,需要分别创建MYSQL和数仓连接,连接主要保存着数据源的连接信息,包括IP、端口、用户名、密码等。

图:创建MYSQL连接参数

MYSQL连接.PNG

图:创建数据仓库服务连接参数

数仓连接.PNG

数仓有两种导入模式:COPY和GDS,两者的区别是GDS导入速度比COPY快,不过需要额外的权限和配置。GDS(Gauss Data Service)是数仓提供的数据服务工具,通过和外表机制的配合,实现数据的高速导入。启动导入作业时,会临时创建一个外表,所以连接用户需要有创建、删除外表权限。COPY和GDS两种模式的网络通讯方向也不一样,使用COPY模式时,数据迁移服务主动向数仓推数据,使用GDS模式时,数仓的数据节点从数据迁移服务拉数据。

GDS.JPG

MN是数仓的管理节点,DN是数据节点,GDS数据不经过MN节点,并且多个DN并发从数据迁移服务拉数据,所以性能更好。

 

 

创建作业

创建将MYSQL的表导入数仓的作业,分三个步骤:

1、选择源表和目的表,由于在数仓没有事先创建好表,可以选择自动创表。

MYSQL到数仓1.JPG

在目的端作业配置,如果选择“不存在时创表”,用户可以选择表的存储模式:行模式和列模式,行和列存储的优缺点大家可以从网上搜索相关资料,一般来说,如果一个OLAP类型的查询可能需要访问几百万甚至几十亿个数据行,且该查询往往只关心少数几个数据列,使用列存储可以提高访问性能;而OLTP(Online Transaction Processing,联机事务处理)应用可以使用行存储。

 

由于我导入全量历史数据,可以对“导入前清空数据”选择“是”,这样可以返回多次执行导入作业,自动清空之前导入的旧数据。

 

2、字段映射,即将源表的字段映射到目的表字段。由于选择自动创表,字段已经一一对应,不需要调整顺序,数据迁移服务会自动将MYSQL的字段类型转换为数仓的字段类型。

MYSQL到数仓2.JPG

在目标字段有个“分布列”参数,这是干什么的呢?由于华为云数据仓库服务是一个分布上系统,数据保存在多个DN节点(即数据节点),需要根据一些字段值计算出一个哈希值,用于决定数据保存在哪个节点,理论上所选字段值越分散,数据分布在数据节点越均匀,所以我们通常选择主键作为分布列。如果用户不选择任何分布列,数据迁移服务会自动给用户选择一个分布列。

 

3、保存并运行作业

任务配置.JPG

 

 

常见问题

1、创建连接时,提示错误“无法连接服务器。 原因 : [Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.] (Cdm.0941)”。

解决方法:遇到这个问题可能的原因是MYSQL、数仓服务的安全组限制了数据迁移服务访问MYSQL、数仓服务,配置安全组可以解决此问题。

 

2、运行作业失败,提示错误“SQL语句无法执行。 原因 : ERROR: value too long for type character varying(7) Where: COPY dws_city, line 1, column name: "广州市"”。

原因:数仓表字符字段长度太短。但是自动创表为什么也会出现这个问题呢?这是因为MYSQL和华为云数据仓库服务存储中文时编码不一样,所需的长度也不一样。

解决方法:如果选择自动创表,在高级参数中选择“扩大字符字段长度”,数据迁移服务在创建表时,字符类型字段的长度会设置原表的3倍。

扩大字符字段长度.JPG


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。