上一个weekly中已经详细讲解了schema的设计,在schema设计好了之后,gBuilder支持将结构化和非结构化数据转化为RDF图数据。其中结构化数据支持数据的无损转化。
1. 技术介绍
gBuilder的结构化数据抽取采用D2RQ技术实现。
DR2Q是一个能够将关系数据库中的内容转换成RDF三元组的工具,由于知识图谱中储存的数据通常为三元组格式,而知识图谱构建模块的数据大多储存在关系数据库中,以不同的表的形式来区分,所以需要进行转换。D2RQ主要包括 D2R Server, D2RQ Engine 以及 D2RQ Mapping 语言。
虽然D2RQ为知识图谱构建模块提供了一个较好的结构化数据自动转换为RDF数据的工具,但由于D2RQ无法与知识图谱Schema相结合,如果完全依赖D2RQ工具的话,会导致生成的RDF数据不符合知识图谱Schema结构,因此,gBuilder结构化数据抽取是一个基于D2RQ和知识图谱Schema的知识图谱构建功能模块。
2. 功能介绍
对于结构化数据通过对表的字段自动化映射到Schema中,从而自动化构建知识图谱,主要包括获取数据库信息、表与实体映射、字段与属性、关系映射、跨表数据映射、生成mapping文件、D2RQ自动抽取。其中映射入口为项目卡片中的对应的【映射】按钮。
2.1 连接关系型数据库
映射首先需要连接存储原始数据的关系型数据库,通过输入数据库名称、数据库类型、数据库地址、用户名、密码、端口号、类型等信息,然后点击连接数据库进行数据库连接。其中当前我们支持MySQL、Oracle、SQL Server、OpenGauss、PostgreSQL、达梦六种数据库类型。类型中我们支持所有表、所有视图、表加视图三种方式进行选择。
例如我们下图连接了一个名称为gbuidlerduie 的MySQL数据库。
连接成功后可以筛选需要进行映射的表,因为数据库中可能存在很多的表,而我们根据schema来选择需要后续操作的表。选择需要映射的表,然后通过点击中间的箭头,即可将其选中:
2.2 关系表与实体的映射
我们在schema设计的实体一般来说都会有一张表或多个表与同一个实体对应,在连接好关系型数据库且选择了需要映射的关系表后,需要将schema中实体同关系表对应起来,我们点击状态为未映射的表点击【映射】进行映射编辑。
依次点击需要处理的关系表,确定其对应的实体及uri标识列(默认是主键),点击后选择在schema中的具体实体名称,针对该实体我们要保障它的唯一性,所以需要选择对应的关系型数据库中的字段(可以选择一个或者多个)作为该实体在知识图谱中的URI(类似关系型数据库中的主键字段)。
同时,由于可能在结构化抽取过程中会定时抽取,为了避免每次全量抽取,提升抽取效率,我们在本步骤进行映射时也可以增加约束条件,在后面进行映射时就只映射符合约束条件的数据,类似SQL语句中的where条件,我们点击【条件】按钮,在弹出的弹框中编写我们的约束条件,例如我们编写只抽取t_song 表中 id>100的数据,那么后面在抽取该表时就只抽取id>100的数据。
处理完的表,按钮会变为蓝色。如需要修改重新点击即可。
如需删除某张表的映射,可右键点击,同时可以点击【批量删除】进行批量的表删除,以及【重置映射】对所有映射关系进行重置。用户也可根据【已映射】和【未映射】状态进行筛选。
对于该步骤我们可以查看当前schema中已经映射好了的实体有哪些,点击【预览映射】即可查看,便于使用者能查看当前映射整体情况,已经映射好的将会以亮色展示,未映射的以灰色展示。
注:只有经过该步操作的表,才会在后续步骤中被处理,因此请确保你要生成三元组的表都进行了映射。
2.3 关系表与谓词的映射
在映射好实体后,接下来需要将实体的属性进行映射。具体将三元组来源于同一张表的列与schema中实体的谓词进行对应。依次选择下拉框中要处理的关系表, 在选好需要处理的表后,平台会将该表有的字段读取出来,例如人物表拥有人物名称、年龄、性别、出生日期等字段,会在平台的【表中的列】的下面展示出来。
如果将表中的列元素拖拽入对应的数据属性谓词框中,生成三元组的宾语为该列的字面值,若需要生成的三元组的宾语,则点击“拖拽变量”按钮,并输入常量值,例如年龄可用常量值100,但是设置常量值后所有人的年龄均会变为设置的常量值。
如果将表中的列元素拖拽入对应的对象属性谓词框中,生成三元组的宾语为该列值对应的实体,因此还需要右键点击以确定其对应实体及对应依据。
完成对应关系处理后,点击右上角“保存当前表”,则下拉框中的表会显示成"已处理",所有表处理完之后就可以点击“下一步”按钮进行后续处理, 若拖拽入对象属性谓词框中的元素没有点击右键进行映射,元素会呈现紫色,无法点击“下一步”按钮。
同样的也可通过【预览映射】查看当前实体属性同schema中的映射情况。
2.4 处理跨表数据
存在希望生成的三元组的主语和宾语来自不同的关系表,即需要处理跨表数据。通过依次选择主语所在的表、schema中谓词、宾语所在的表、宾语所在的列,以及跨表连接的依据。
这里会涉及到两种情况,一种是对于实体的属性值来源于其他的表,以及实体和实体的关系之间来源于其他的表。
第一种例如人物的性别这个属性的值它来源于另外一张表中,当前表中只是编码,例如001这种,但是还需要将001转化为具体的男或者女,那么就需要通过在另外一张编码表中去找到这样涉及多表的数据处理需要用此步骤,如下图所示:首先我们选择主语的表人物表t_person 谓语(即属性)为性别,性别来源的表为t_b_bcode编码表, 然后用标题作为性别的具体值,然后添加join依据,即我们用人物表t_person中的性别字段去等于t_b_bcode编码表中的id字段来去join。在设置好这个依据后就可以将人的性别在最终的三元组中为一个具体的男还是女。
第二种实体之间的关系,即宾语是对象而非某一列的字面值,宾语列选择none对象,系统会匹配到该表对应的实体,然后根据上面的一样去进行join依据的设置,这样即可进行实体之间关系的三元组抽取。
join依据中依次选择要连接的两张表和连接的列,如若需要跨多张表,可添加多组join依据。
同时我们可以进行编辑操作,修改前面设置的映射关系。
通过以上四个步骤能够使用户按照自己的需求实现关系数据库到RDF三元组的转换,并且从繁琐的映射规则编写中解放出来我们的流程可以满足用户绝大部分需求。如果还有更复杂的要求,我们也可以支持一键生成mapping文件,通过编写mapping文件或处理关系数据库来完成。
2.5 生成mapping文件
通过在项目卡片上点击【mapping生成】即可根据前面四步设置的映射关系自动生成mapping文件。
此外,也可对生成的mapping文件进行编辑和修改:
2.6 D2RQ自动抽取
通过点击项目管理卡片的【生成NT文件】即可通过任务的方式使用D2RQ引擎将数据自动抽取为NT文件,文件的数据格式为RDF三元组。
除此之外还支持直接导入一个已有的项目使用,见gBuilder功能详解之项目管理章节对应内容。
若大家在实际项目中需要使用gBuilder可联系运营同学或者发送邮件进行项目层面合作沟通。