5 分钟迁移关系型数据库到图数据库

本文分享自华为云社区《5分钟迁移关系型数据库到图数据库》,作者: RiverSide 。
以往开发者会使用关系型数据库如 MySQL 对领域数据进行存储,这类关系型数据库诞生较早,但并不适合存储关联度较大的数据,如社交关系网络。随着高关联度数据的存储及分析的需求随数据量日益增长,将海量关联数据存入图数据库中进行深度挖掘分析是大势所趋。华为云图引擎服务(Graph Engine Service)是国内首个商用的、拥有自主知识产权的国产分布式原生图引擎。广泛应用于社交应用、企业关系分析、风控、推荐、反欺诈等具有丰富关系数据的场景。
由于关系型数据库和如 GES 的图数据库天然存在的异构性,将已有的关系型数据库中的数据存储至图数据库中仍存在较多的难点。本文借助 Apache Hop 及 GES 插件,提供了多数据源通用、可视化、开箱即用的数据转换工程,可将多种关系型数据库迁移至 GES 图数据库中。转换工作流复用度高,可通过输入不同的元数据文件与数据源连接,使转换工作流完成多个数据源的迁移任务。
支持的数据源
借助 Apache Hop 的能力,支持 MySQL,PostgreSQL,Oracle,MS SqlServer 等多种关系型数据库,具体列表参见:Database Plugins :: Apache Hop
数据要求
已经建立好 GES 图模型,属性名与表中的字段名相同
对单个标签来说,所有属性都在同一张表中
数据源中的数据符合图模型中对应数据类型的要求(如 GES 中 date 类型为 yyyy-mm-dd hh:mm:ss,若数据源中的 date 类型不合要求,应在数据源转为相应格式的字符串类型)
节点唯一性问题
在图数据库中不允许存在两个索引值相同的节点,因此需要确保节点的全局唯一性,即节点 id。通常情况下,可以将表中具有唯一性约束的字段,如表的主键映射为对应节点数据的 id。在关系型数据库(如 MySQL)中,不同的表属于不同的命名空间,即不同表中的主键可以相同的值。因此在这种情况下,需要改变相应的映射规则。如通过将表名与主键拼接的方式生成新的节点 id,以确保节点的全局唯一性。
在转换过程中,需要将指定的 id 映射关系生成为以下格式的 csv:标签名, 表名,节点 id 对应字段,终点 id 对应字段。此处若标签对应的是点数据,则终点 id 为空。
如在 TPC-H 数据集中,表数据转换为一条简单的关系及其起点终点,需要指明的信息如下:
对于 Order 标签的节点,数据源中对应的表名为 orders;采用主键 o_orderkey 作为节点 id。
对于 Supplier 标签的节点,数据源中对应的表名为 supplier;采用主键 s_suppkey 作为节点 id。
对于 supply 标签的边,数据源中对应的表名为 lineitem;起点为 Supplier,对应表 lineitem 表中外键 l_suppkey 作为起点 id;终点为 Order,对应外键 l_orderkey 作为终点 id。需要注意的是,边的起点与终点的 id 映射需要与对应标签的节点 id 映射对应,如例子中的 lineitem 表的外键 l_suppkey 对应的正是 supplier 表中的 s_suppkey,它们的值为一一对应的关系。

流程概述

数据转换的主要思路是以 csv 文件格式为媒介,将关系型数据库中的数据按指定格式导出至 csv 文件中,导出数据借助华为云对象存储服务(OBS)上云,GES 服务完成云端数据导入图实例。

数据的格式转换发生在查询结果生成过程中,通过解析元数据与 id 映射文件,我们可以在动态生成的 SQL 语句的 SELECT 子句中指定查询结果的格式。将查询结果写入 csv 即可得到可以导入 GES 图实例的数据文件。
环境准备
Apache Hop
Apache Hop(Hop Orchestration Platform)是一个数据编排和数据工程平台,旨在促进数据和元数据编排的各个方面。Hop 让您专注于您试图解决的问题,而不会有技术阻碍。
下载 Apache Hop v2.4.0:Download - Hop
Apache Hop 依赖 JDK11,检查 java 版本,若不满足可按附件中《使用说明》配置:

通过 hop 文件夹下 hop-gui.bat 进入 gui 操作界面

加载 GES 插件
GES Plugin for Apache Hop 是 GES 开发用于连接 Hop 工具的插件,用于将上传数据文件、将云端数据导入图实例等操作。
在附件中下载 GES 插件后,解压.zip 文件,将 hop-transform-ges 文件夹放到 Apache Hop 文件夹./hop/pulgins/transforms 下。
数据迁移
数据准备
本文以 TPC-H 数据集为例,对数据集中的部分数据建立如下图模型:

对应的 GES 元数据文件如下,文件格式可参考:GES图的基本概念和数据格式

节点 id 映射关系文件如下,使用”标签名_主键“的格式确保 id 唯一性:

运行迁移工程
点击上方菜单栏新建项目:

指定项目名称与项目主目录

将工程文件拷贝到项目主目录,完成后项目主目录下文件如下图。其中.hpl 与.hwf 文件为定义好的 hop 转换规则文件,tpch.xml 为 GES 元数据文件,tpch.csv 为节点 id 映射关系文件。

在 gui 界面中点击 metadata->relational database connection,选择合适的关系型数据库类型,填入账号密码等信息。

点击 metadata->GES Connection,建立图连接,按.zip 附件中说明文档填入账号密码等信息。

点击项目详情,定义相关参数为项目变量:

打开 RelationalDB_to_GES.hwf:

点击运行


数据转换结束,数据转换至对应路径下,共转换点边近 3700 万行,用时约 200 秒

登录前端图访问页面,可以查询到导入数据,数据成功导入。

版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/38b6e46fcac80df4e5f92aa27】。文章转载请联系作者。
评论