根据 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,魏