GeaFlow (TuGraph-Analytics)
GeaFlow是蚂蚁自研的分布式实时图计算引擎,支持离线图计算和流式图计算能力。它通过图模型优化关系运算,与数据湖格式Hudi集成,加速数据查询和分析处理。
• Copy the embed code to showcase this product on your website
• Share on X to spread the word about this amazing tool
GeaFlow是蚂蚁自研的分布式实时图计算引擎,支持离线图计算和流式图计算能力。它通过图模型优化关系运算,与数据湖格式Hudi集成,加速数据查询和分析处理。
• Copy the embed code to showcase this product on your website
• Share on X to spread the word about this amazing tool
sqlselect s.id, s.name, e.score from student s join examination e join c courseon s.id = s.student_id and e.course_id = c.idwhere c.name = 'math'order by e.score desc limit 10对应图查询:sqlMatch(s:student) - [e:examination]->(c:course where c.name = 'math')Return s.id, s.name, e.score order by e.score desc limit 10* 查询选课人数最多的老师Top 3sqlselect tr.id, count(s.id) from student s join selectCourse sc join course c join teach th join teacher tron s.id = sc.student_id and sc.course_id = c.id and c.id = th.course_idand th.teacher_id = tr.idorder by count(s.id) desclimit 3对应图查询:sqlMatch(s:student)-[sc:selectCourse]->(c:course)<-[th:teach]-(tr:teacher)Return tr.id, count(s.id) as cnt order by cnt desc limit 3## 图模型和表模型关系图模型本身包含点数据集和边数据集,点边数据集来源于表数据,比如Hive表、Hudi表等。所以,图模型是表模型的超集,是对表模型的补充和完善。图模型可以起到类似宽表的作用,物化表的关系,同时能更灵活的定义关系,消耗更小的存储开销.# GeaFlow和Hudi集成GeaFlow(品牌名TuGraph-Analytics)是蚂蚁自研的分布式实时图计算引擎,兼顾离线图计算能力。GeaFlow以图模型作为基本的数据模型,在图模型基础之上定义了一套图计算的编程接口,同时和流式处理能力相结合,实现了流式图计算的能力。在DSL语言层面,GeaFlow将表处理语言SQL和图查询语言ISO/GQL相结合,实现了图表一体的数据分析能力。通过GeaFlow图计算的能力,很好的解决了大规模数据关联关系计算的问题。Hudi是业界热门的数据湖格式,旨在解决数据湖中数据的变更管理问题。Hudi使用了一种基于日志的存储方式,可以支持数据的实时增量、删除和更新,并且能够保证数据的一致性和可靠性。Hudi的核心思想是将数据划分成小的数据块,每个数据块都包含了数据的变更历史,可以通过增量方式和全量方式读取和写入数据。Hudi支持多种数据格式,包括Parquet、ORC、CSV等,并且可以与Hadoop、Spark、Flink等大数据处理框架无缝集成,可用于数据湖的建设和数据管理。Hudi的出现大大简化了数据湖的数据变更管理和数据处理流程,是一个非常优秀的数据管理框架。GeaFlow支持和多种数据源集成,包括Hudi。利用GeaFlow图计算的能力,可以对Hudi数据湖数据做关系物化,加速DWD层的查询性能和时效性,同时也可以基于图数据做更多复杂的图算法分析。sqlCREATE GRAPH IF NOT EXISTS friend ( Vertex person ( id bigint ID, name varchar ), Edge knows ( srcId bigint SOURCE ID, targetId bigint DESTINATION ID, weight double )) WITH ( storeType='rocksdb', shardCount = 4);这张图定义包含点表person和边表knows. 点表person定义了点的属性信息和id字段,id字段唯一标识图里面的点,为点表的主键,通过ID 关键字来定义。边表knows里面定义好友关系,srcId为关系的起点,通过SOURCE ID关键字定义;targetId为关系的目标点,通过DESTINATION ID关键字定义。weight字段则为边的一个属性字段。一张图的点边或者边表可以包含零个或者多个属性字段。## Hudi表定义首先我们需要定义一张Hudi点表和Hudi边表:sqlset geaflow.dsl.window.size = -1;CREATE TABLE IF NOT EXISTS hudi_person ( id BIGINT, name VARCHAR) WITH ( type='hudi', -- hdfs 配置,也可通过HADOOP_HOME环境变量获取 `geaflow.file.persistent.config.json` = '{\'fs.defaultFS\':\'namenode:9000\'}',geaflow.dsl.file.path='/path/to/hudi_person');CREATE TABLE IF NOT EXISTS hudi_knows ( src_id BIGINT, target_id BIGINT, weight DOUBLE) WITH ( type='hudi', -- hdfs 配置,也可通过HADOOP_HOME环境变量获取 `geaflow.file.persistent.config.json` = '{\'fs.defaultFS\':\'namenode:9000\'}',geaflow.dsl.file.path='/path/to/hudi_knows');GeaFlow是一个流式图计算引擎,数据源按照window size切分成一系列的window, 引擎会依次处理这些window的数据。如果window size设置为-1,则代表一个All Window,即一次全量处理所有数据。对于Hudi这样的批数据源接口,需要设置window size为-1来处理。## 构图构图是将外部数据表的数据写入到图里面,可以通过Insert语句来完成。如下语句,分布将hudi表里面的数据写入到friend图的person表和knows表里面,完成图数据的构建。sqlINSERT INTO friend.person(id, name)SELECT id, nameFROM hudi_person;INSERT INTO friend.knowsSELECT src_id, target_id, weight * 10FROM hudi_knows;## 图计算接下来是对构建好的图数据做图计算,我们以SSSP(单源最短路径)和四度环路检查为例进行介绍:sqlCREATE TABLE IF NOT EXISTS sssp_result ( vid int,distance bigint) WITH (type='file', `geaflow.file.persistent.config.json` = '{\'fs.defaultFS\':\'namenode:9000\'}',geaflow.dsl.file.path='/path/to/result');-- 定义计算使用的图USE GRAPH friend;INSERT INTO sssp_resultCALL SSSP(1) YIELD (vid, distance)RETURN vid, distance;-- 图算法执行INSERT INTO resultCALL SSSP(1) YIELD (vid, distance)RETURN vid, distance;首先需要定义一个结果表result来存放计算结果,然后通过USE GRAPH命令来设置当前计算用到的图。最后通过CALL语句来执行SSSP算法(其中SSSP算法的入参为起始点id), 并将计算结果写入结果表。四度环路匹配如下语句,通过Match匹配一个4度环路的pattern,然后将结果写出结果表.sqlCREATE TABLE IF NOT EXISTS match_result ( a_id bigint, b_id bigint, c_id bigint, d_id bigint, a1_id bigint) WITH ( type='file', `geaflow.file.persistent.config.json` = '{\'fs.defaultFS\':\'namenode:9000\'}',geaflow.dsl.file.path='/path/to/result2');-- 四度环路匹配INSERT INTO match_resultSELECT a_id, b_id, c_id, d_id, a1_idFROM ( MATCH (a:person) -[:knows]->(b:person) -[:knows]-> (c:person) -[:knows]-> (d:person) -> (a:person) RETURN a.id as a_id, b.id as b_id, c.id as c_id, d.id as d_id, a.id as a1_id);# 总结本文主要分析了表模型的现状和问题,然后介绍了图模型在处理关系运算上的优势,接着介绍了图计算引擎GeaFlow和数据湖格式hudi的整合,利用图计算引擎加速数据湖上的关系运算.GeaFlow已正式开源,欢迎大家关注!!!GitHub地址:https://github.com/TuGraph-family/tugraph-analyticsA code-free online store builder to turn views into revenue. Sell digital products, subscriptions, and merch, without fees or hassle.
Convert videos into awesome blog posts.
Fast Image AI instantly transforms your photos into stunning styles like Ghibli, Sketch, and Pixar. Effortlessly control image elements and create amazing effects with just one click.
AI-powered tool that transforms casual photos into professional LinkedIn headshots instantly. No photographer needed—just upload and download.
Crevas unifies Veo 3, Sora 2, Nano Banana and more into one intuitive canvas — so filmmakers can script, prompt, and generate cinematic stories without switching tools or losing consistency.
AI Foto Edit - Text to Image & Image Edit