Generate schema for NebulaGraph from MySQL sources
#5,728 opened on Sep 26, 2023
Repository metrics
- Stars
- (9,828 stars)
- PR merge metrics
- (No merged PRs in 30d)
Description
Given table DDLs and a sample set of queries from a MySQL database, generate a corresponding graph model for NebulaGraph consisting of DDLs of graphs, vertices and edges, as well as a sample set of nGQL queries that would do the same job as those in the MySQL database.
Example:
Given the following DDLs from the TPC-H benchamrk,
CREATE TABLE part (
P_PARTKEY INTEGER primary key,
P_NAME VARCHAR(55) NOT NULL,
P_MFGR CHAR(25) NOT NULL,
P_BRAND CHAR(10) NOT NULL,
P_TYPE VARCHAR(25) NOT NULL,
P_SIZE INTEGER NOT NULL,
P_CONTAINER CHAR(10) NOT NULL,
P_RETAILPRICE DECIMAL(15,2) NOT NULL,
P_COMMENT VARCHAR(23) NOT NULL
);
CREATE TABLE supplier (
S_SUPPKEY INTEGER primary key,
S_NAME CHAR(25) NOT NULL,
S_ADDRESS VARCHAR(40) NOT NULL,
S_NATIONKEY INTEGER NOT NULL,
S_PHONE CHAR(15) NOT NULL,
S_ACCTBAL DECIMAL(15,2) NOT NULL,
S_COMMENT VARCHAR(101) NOT NULL
);
CREATE TABLE partsupp (
PS_PARTKEY INTEGER NOT NULL,
PS_SUPPKEY INTEGER NOT NULL,
PS_AVAILQTY INTEGER NOT NULL,
PS_SUPPLYCOST DECIMAL(15,2) NOT NULL,
PS_COMMENT VARCHAR(199) NOT NULL, primary key (ps_partkey, ps_suppkey)
);
we may create tags in the NebulaGraph like the following:
CREATE TAG IF NOT EXISTS part (
P_NAME FIXED_STRING(55) NOT NULL,
P_MFGR FIXED_STRING(25) NOT NULL,
P_BRAND FIXED_STRING(10) NOT NULL,
P_TYPE FIXED_STRING(25) NOT NULL,
P_SIZE INT32 NOT NULL,
P_CONTAINER FIXED_STRING(10) NOT NULL,
P_RETAILPRICE FLOAT NOT NULL,
P_COMMENT FIXED_STRING(23) NOT NULL
);
CREATE TAG IF NOT EXISTS supplier(
S_NAME STRING NOT NULL,
S_ADDRESS FIXED_STRING(40) NOT NULL,
S_NATIONKEY INT16 NOT NULL,
S_PHONE FIXED_STRING(15) NOT NULL,
S_ACCTBAL FLOAT NOT NULL,
S_COMMENT FIXED_STRING(101) NOT NULL);
);
and an edge type indicating the relationship of 'supply' like this:
CREATE EDGE IF NOT EXISTS supply(
PS_AVAILQTY INT64 NOT NULL,
PS_SUPPLYCOST FLOAT NOT NULL,
PS_COMMENT FIXED_STRING(199) NOT NULL
);
In this example, PKs and their coresponding unique identifiers (i.e., vertex IDs) have been omitted. The idea is to create tags for vertices to work like fact tables and to create edges to replace join-like operations or tables storing relationships.