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

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 小伙伴们想玩一玩图计算,数据的导入工作总是绕不开的一个环节。为了降低大家数据导入操作的成本,提升图计算的整体使用体验,TuGraph Analytics推出了“图数据集成”能力,帮助大家通过简单配置完成数据导入工作。

作者:廖梵抒

图数据集成

小伙伴们想玩一玩图计算,数据的导入工作总是绕不开的一个环节。为了降低大家数据导入操作的成本,提升图计算的整体使用体验,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包含了表名、图名、和对应的字段映射项列表。

@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模板引擎框架,其模板如下:

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点

创建software点

创建边

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

创建creates边

创建knows边

创建图

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

创建图

配置图

创建输入表

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

创建输入表

配置输入表

测试数据:

-- 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

相关文章
|
6月前
|
存储 DataWorks 关系型数据库
DataWorks产品使用合集之在使用数据集成中的同步任务从mysql同步表到oss,存储为csv时,最终生成的文件中没有表头,这个属性可以在哪里配置么
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
SQL 消息中间件 存储
TuGraph Analytics动态插件:快速集成大数据生态系统
插件机制为GeaFlow任务提供了外部数据源的集成能力扩展,GeaFlow支持从各类Connector中读写数据,GeaFlow将它们都识别为外部表,并将元数据存储在Catalog中。GeaFlow已有一些内置的插件,例如FileConnector,KafkaConnector,JDBCConnector,HiveConnector等。
|
2月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
27天前
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
51 0
|
5月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
319 6
|
5月前
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
422 4
|
5月前
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
385 1
|
6月前
|
消息中间件 Java Kafka
springboot集成kafka
springboot集成kafka
187 2
|
6月前
|
监控 前端开发 Java
五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
|
5月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成