创建 Schema
观察本次案例将分析的数据,账号与账号之间有邀请、兑换关系,在发生邀请或者兑换事件时,日志中还记录了设备号(IMEI),IP地址等信息,这些信息都可以构成图中的节点和边。在一些关于图神经网络的 Paper 中,它被称作异质图 (Heterogeneous Graph),指的是在 Graph 中存在不同类型的节点。在 Schema 中,我们会把账号,IP,设备号等信息,都体现在节点上。
Schema 如下图:

本次案例使用 gsql 脚本来创建 Schema
CREATE VERTEX Account (PRIMARY_ID id STRING, phone STRING, reg_time INT, reg_date STRING) WITH STATS="outdegree_by_edgetype"
CREATE VERTEX IMEI (PRIMARY_ID id STRING, imei STRING) WITH STATS="outdegree_by_edgetype"
CREATE VERTEX IP (PRIMARY_ID id STRING, ip STRING) WITH STATS="outdegree_by_edgetype"
CREATE VERTEX Subnet (PRIMARY_ID id STRING, subnet STRING) WITH STATS="outdegree_by_edgetype"
CREATE VERTEX BonusOrder (PRIMARY_ID id STRING, order_id STRING, order_date STRING)
CREATE VERTEX OneDay (PRIMARY_ID id STRING) WITH STATS="outdegree_by_edgetype"
CREATE UNDIRECTED EDGE use_imei (FROM Account, TO IMEI)
CREATE UNDIRECTED EDGE use_ip (FROM Account, TO IP)
CREATE UNDIRECTED EDGE accountReg_date (FROM Account, TO OneDay)
CREATE UNDIRECTED EDGE in_subnet (FROM IP, TO Subnet)
CREATE UNDIRECTED EDGE bonusOrder_date (FROM BonusOrder, TO OneDay)
CREATE DIRECTED EDGE send_bonus (FROM Account, TO BonusOrder)
CREATE DIRECTED EDGE recv_bonus (FROM BonusOrder, TO Account)
CREATE DIRECTED EDGE invite (FROM Account, TO Account) WITH REVERSE_EDGE="reverse_invite"
CREATE GRAPH MyGraph (*)
使用 CREATE VERTEX
来创建节点,WITH STATS = "outdegree_by_edgetype"
的作用是让 TigerGraph 自动提前统计每个节点各种类型的边的数量,如果后续的查询语句会大量用到节点的 degree 信息,开启这个选项可以使查询的速度加快。
使用 CREATE DIRECTED | UNDIRECTED EDGE
来创建边,需要指定边的左右两边的点类型。如果需要增加边属性,可以写在 FROM, TO 之后。
使用 CREATE GRAPH MyGraph (*)
会将当前所有类型的点和边都包含进一张图中,该图成为 MyGraph
最后通过 GSQL 完成 Schema 创建:
$ gsql "DROP ALL" # 清除之前图数据库中所有信息,还原初始状态
$ gsql create_graph.gsql
最后更新于
这有帮助吗?