前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TuGraph Analytics图数据集成:表到图的最后一公里

TuGraph Analytics图数据集成:表到图的最后一公里

原创
作者头像
GeaFlow
发布2024-01-31 17:09:58
1270
发布2024-01-31 17:09:58
举报
文章被收录于专栏:流图计算流图计算

作者:廖梵抒

图数据集成

小伙伴们想玩一玩图计算,数据的导入工作总是绕不开的一个环节。为了降低大家数据导入操作的成本,提升图计算的整体使用体验,TuGraph Analytics推出了“图数据集成”能力,帮助大家通过简单配置完成数据导入工作。

要实现图上的数据处理,可大致分为三个阶段:

  1. 数据准备:准备图的点边的原始数据。如文件(CSV/JSON)、Hive表、Kafka消息队列等数据源。
  2. 数据导入:将原始的表结构数据(结构化/半结构化)格式化成图结构写入图引擎。一般采用编写SQL或基于引擎API开发数据导入任务。
  3. 数据分析:基于图引擎对已经导入的图格式数据分析处理。一般使用GQL、Gremlin、Cypher等图分析语言处理,复杂的图算法(图上的迭代、采用、推理等)可能需要用户自己开发UDF。(Java/Python)

因此,实现图上的数据分析的前置动作便是图数据导入,简称“构图”。这里我们使用“图数据集成”的说法,是沿用了传统数据仓库里“数据集成”的概念。

TuGraph Analytics可以通过编写SQL代码实现高效的数据导入到图的能力。但当数据源头和表字段过多时,编写出来的DSL代码往往非常冗长,而且用户手动编写的代码容易出现插入的字段映射错位、数量不匹配等问题。为此,TuGraph Analytics的Console平台为用户提供了到图的一键“数据集成”功能,允许用户可在界面中选择输入表和对应的目标点边,平台会自动化生成对应的DSL代码,实现图数据导入,避免了大量冗长的代码的编写和校对工作。

任务设计

类似传统数据库表的INSERT操作,图数据集成则是向图的点边表插入数据。图中的点边也是一种表结构,每个点边都有相应的属性(对应表结构中的字段),并可以与数据源的表字段一一映射。所以可以通过给定外部输入表和目标点边的映射关系来描述图数据集成任务。

表图字段映射
表图字段映射

图数据集成任务维护了用户填写的输入表到图的目标点边的映射关系。映射关系结构为StructMapping的数组,每个StructMapping包含了表名、图名、和对应的字段映射项列表。

代码语言:java
复制
@EqualsAndHashCode(of = {"tableName", "structName"})
public static class StructMapping {
    private String tableName;
    private String structName;
    private List<FieldMappingItem> fieldMappings = new ArrayList<>();
}

@EqualsAndHashCode(of = {"tableFieldName", "structFieldName"})
public static class FieldMappingItem {
    private String tableFieldName;
    private String structFieldName;
}

任务发布阶段,根据映射关系生成相应的构图dsl代码。代码生成主要使用Velocity模板引擎框架,其模板如下:

代码语言:velocity
复制
USE GRAPH ${graphName};

#foreach(${insert} in ${inserts})
insert into ${graphName}(
    #foreach(${strcut} in  ${insert.structs})
    ${strcut.structName}.${strcut.structFieldName},
    #end
    ${END_FLAG}
) select
    #foreach(${strcut} in ${insert.structs})
    ${strcut.tableFieldName},
    #end
    ${END_FLAG}
from ${insert.tableName};
    
#end

映射关系需满足如下约束:

  1. 一个目标点或边的数据只能来自一个输入表,而一个输入表可以写入多个点边。
  2. 输入表字段类型和目标点边字段类型需要相同。
  3. 目标点边上的meta字段(点id,边srcId, 边targetId等)必须插入。

Demo演示

本示例中以下图为例,图中有2种点person和software,以及2种边knows和creates。

图模型
图模型

创建点

在界面中创建person和software点的schema。

创建person点
创建person点
创建software点
创建software点

创建边

在界面中创建creates和knows边的schema。

创建creates边
创建creates边
创建knows边
创建knows边

创建图

界面中勾选图所需的点边,创建图的schema, 类型设置为“ROCKSDB”。

创建图
创建图
配置图
配置图

创建输入表

在界面中创建输入表t_person、t_software、t_creates、t_knows,参数配置中填写对应的文件路径,以t_person为例:

创建输入表
创建输入表
配置输入表
配置输入表

测试数据:

代码语言:json
复制
-- person.txt
1,jim,29
2,kate,27
3,tom,32

-- software.txt
4,software1,java
5,software2,c

-- knows.txt
1,2
1,3
3,2

-- creates.txt
2,4,0.2
3,4,0.1
3,5,0.5

创建集成任务

在新增图任务中,任务类型选择"集成",并选择对应的目标图,即自动生成待插入的所有目标点边和字段项。(可根据需求删除不需要插入的目标点边或字段)

选择点边
选择点边

只需在左侧选择每个点边对应的输入表,即可自动填充映射字段。

选择输入表
选择输入表

所有输入表选择完成后,所有表到目标点边的映射项都填充完成,点击"提交"即可创建集成任务。

配置字段映射
配置字段映射

提交作业

任务发布为作业后,可在作业详情界面看到自动生成的构图DSL代码,点击提交执行图数据集成作业。

提交作业
提交作业

查看结果

创建相应的图查询任务,详细见《TuGraph Analytics交互式图查询:让图所见即所得》,运行后进入查询界面,即可查询到所构图的数据。

图查询
图查询

欢迎关注我们的GitHub仓库:https://github.com/TuGraph-family/tugraph-analytics

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 图数据集成
  • 任务设计
  • Demo演示
    • 创建点
      • 创建边
        • 创建图
          • 创建输入表
            • 创建集成任务
              • 提交作业
                • 查看结果
                相关产品与服务
                数据集成
                数据集成(DataInLong)源于腾讯开源并孵化成功的 ASF 顶级项目 Apache InLong(应龙),依托 InLong 百万亿级别的数据接入和处理能力支持数据采集、汇聚、存储、分拣数据处理全流程,在跨云跨网环境下提供可靠、安全、敏捷的全场景异构数据源集成能力。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档