根据 sql 查询创建图表
Create graph from sql query
我有这个 UML 模式:
SQL:
SELECT DISTINCT
Name,
ID,
File,
Date
FROM
Table1
INNER JOIN Table2 ON Table1.ID = Table2.ID
INNER JOIN Table3 ON Table2.ID2 = Table3.ID2
INNER JOIN Table4 ON Table3.ID3 = Table4.ID3
我想创建一个包含边和节点的图来生成与 networkx 的关系图。如何将此 SQL 查询转换为边和节点?有人可以给我举个例子吗?
建模图的过程实际上是在建立连接(主要是logically/non-physically在non-graph DB中连接)。
因此,我对进行此类传输的建议是:
找到您关心的connections/edges/relationships
- 这里,我认为是ID-ID2(table2)和ID2-ID3(table3)
将连接的相关端设为node/vertex类型
- 此处,ID(table1)、ID2(table3)、ID3(table4) 是顶点 types/label/tag,具体取决于您的图形数据库。
将属性放入边和顶点,这已经成为属性图形模式
- 边类型,想到PURCHASED/ORDERED
- ID-ID3(table2-关系)
- 数,想到ORDER_ID
- ID2-ID3(table3-关系),想到DELIVERRED_BY
- 其他 属性 需要的话再想delivery_id
- 标签(顶点类型)
- ID(table1),想到Account
- 生日
- ID2(table3), 想到商品
- 价格
- 类别
- ID3(table),想起快递
重新审视你的设计,根据你查询的方式进行适配data/graph,这是关于是否将一些属性作为新的顶点type/tag/label
- 即如果您的系统将查询
FIND all category: "foobar" Goods
或不查询,商品类别可以是 tag/vertex 类型,我放了一些权衡示例 here,请注意我们应该仔细设计它,如果可以的话,避免超级节点(比如一个品类关联1M商品)
在 Nebula Graph(一个开源的分布式图形数据库,讲密码,擅长处理高并发的海量数据write/read,cloud-native)。
在Nebula Graph中,对于edge/relationship,会有4元组标识一个relationship/edge实例:(src, dst, edge_type, rank),其中rank会启用两个顶点之间多次connections/edges,想到多次为一个帐户购买一件商品。
架构(在 nGQL DDL 中)将是:
CREATE SPACE IF NOT EXISTS my_graph_space0(partition_num=100, replica_factor=3, vid_type=FIXED_STRING(32));
USE my_graph_space0;
# Create types of VERTEX/NODE
CREATE TAG account(birthday date); # think of table1,vertexID will be ID
CREATE TAG goods(price_us_dollar int); # think of table3, vertexID will be ID2
CREATE TAG delivery_agency(name string); # think of table3, vertexID will be ID3
# Create types of EDGE/RELATIONSHIP
CREATE EDGE ORDERED(order_id int); # think of ID-ID3(table2-relation), order_id could be both property and a rank
CREATE EDGE DELIVERRED_BY(delivery_id int); # think of ID2-ID3(table3-relation)
希望对您有所帮助。
BR,魏
我有这个 UML 模式:
SQL:
SELECT DISTINCT
Name,
ID,
File,
Date
FROM
Table1
INNER JOIN Table2 ON Table1.ID = Table2.ID
INNER JOIN Table3 ON Table2.ID2 = Table3.ID2
INNER JOIN Table4 ON Table3.ID3 = Table4.ID3
我想创建一个包含边和节点的图来生成与 networkx 的关系图。如何将此 SQL 查询转换为边和节点?有人可以给我举个例子吗?
建模图的过程实际上是在建立连接(主要是logically/non-physically在non-graph DB中连接)。
因此,我对进行此类传输的建议是:
找到您关心的connections/edges/relationships
- 这里,我认为是ID-ID2(table2)和ID2-ID3(table3)
将连接的相关端设为node/vertex类型
- 此处,ID(table1)、ID2(table3)、ID3(table4) 是顶点 types/label/tag,具体取决于您的图形数据库。
将属性放入边和顶点,这已经成为属性图形模式
- 边类型,想到PURCHASED/ORDERED
- ID-ID3(table2-关系)
- 数,想到ORDER_ID
- ID2-ID3(table3-关系),想到DELIVERRED_BY
- 其他 属性 需要的话再想delivery_id
- ID-ID3(table2-关系)
- 标签(顶点类型)
- ID(table1),想到Account
- 生日
- ID2(table3), 想到商品
- 价格
- 类别
- ID3(table),想起快递
- ID(table1),想到Account
- 边类型,想到PURCHASED/ORDERED
重新审视你的设计,根据你查询的方式进行适配data/graph,这是关于是否将一些属性作为新的顶点type/tag/label
- 即如果您的系统将查询
FIND all category: "foobar" Goods
或不查询,商品类别可以是 tag/vertex 类型,我放了一些权衡示例 here,请注意我们应该仔细设计它,如果可以的话,避免超级节点(比如一个品类关联1M商品)
- 即如果您的系统将查询
在 Nebula Graph(一个开源的分布式图形数据库,讲密码,擅长处理高并发的海量数据write/read,cloud-native)。
在Nebula Graph中,对于edge/relationship,会有4元组标识一个relationship/edge实例:(src, dst, edge_type, rank),其中rank会启用两个顶点之间多次connections/edges,想到多次为一个帐户购买一件商品。
架构(在 nGQL DDL 中)将是:
CREATE SPACE IF NOT EXISTS my_graph_space0(partition_num=100, replica_factor=3, vid_type=FIXED_STRING(32));
USE my_graph_space0;
# Create types of VERTEX/NODE
CREATE TAG account(birthday date); # think of table1,vertexID will be ID
CREATE TAG goods(price_us_dollar int); # think of table3, vertexID will be ID2
CREATE TAG delivery_agency(name string); # think of table3, vertexID will be ID3
# Create types of EDGE/RELATIONSHIP
CREATE EDGE ORDERED(order_id int); # think of ID-ID3(table2-relation), order_id could be both property and a rank
CREATE EDGE DELIVERRED_BY(delivery_id int); # think of ID2-ID3(table3-relation)
希望对您有所帮助。
BR,魏