本文分享自华为云社区《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秒
登录前端图访问页面,可以查询到导入数据,数据成功导入。