This tool allows you to migrate existing database to a graph database
Conversions supported:
- json to gremlin
- json to graph
- sql to graph
npm i -g migrate-to-graph
Usage: migrate-to-graph [options] [command]Options: -V, --version output the version number -h, --help output usage informationCommands: jsontogremlin <inputFile> <templateFile> <outputFile> jsontograph <inputFile> <templateFile> <graphConfigFile> sqltograph <sqlConfigFile> <query> <templateFile> <graphConfigFile>
npm i --save migrate-to-graph
vargraphtool=require('migrate-to-graph');varresult=graphtool.jsonToGraph(json,template);//or ES6import{jsonToGraph}from'migrate-to-graph';{"dialect":"mssql",//dialect to use, 'mysql'|'sqlite'|'postgres'|'mssql'"username":"test","password":"password","host":"server","database":"database","options":{"encrypt":true//set to true if you need encryption}}{"host":"server","password":"password","user":"username","port":"443","ssl":true,"batchSize":10,//No. of gremlin queries to execute in parallel (Default: 10)"upsert":false//Set to true if you want to upsert vertices or edges (Default: false)}Note:For Azure cosmos graph DB , user is '/dbs/{dbName}/colls/{collectionName}' and password is its secretKey
To transform data to a graph, you need to transform the data into vertex and edge format.
Using a template you can convert a single data object into one/many vertexes and edges
We use handlebars to convert input to vertex / edge format
template:
{ "vertices":[ { "id": "{{myId}}", "label": "vertexLabel", "properties":{ "name": "{{myName}}" } }, { "id": "{{myFriendId}}", "label": "vertexLabel", "properties":{ "name": "{{myFriendName}}" } } ], "edges":[ { "label": "friend", "from": "{{myId}}", "to": "{{myFriendId}}", "properties": { "value" :{{friendshipLvl}} } } ]}Note: You can specify as many vertices and edges as you want as long as it transforms to Vertex-Edge format
Input Data(a single entity from array of data):
{"myId":"1","myName":"abc","myFriendId":"2","myFriendName":"xyz","friendshipLvl":3 }Transformed Data:
{"vertices":[ {"id":"1","label":"vertexLabel","properties":{"name":"abc" } }, {"id":"2","label":"vertexLabel","properties":{"name":"xyz" } } ],"edges":[ {"label":"friend","from":"1","to":"2","properties": {"value" :3 } } ]}This is a custom format inspired from the way Azure Cosmos Graph DB stores data. We use this format to convert it to gremlin queries so you need to provide a template which transforms to vertex-edge format
Model for Vertex and Edge
exportinterfaceVertex{id:string;label:string;//label for the vertextype:'vertex';properties:{[key:string]:any;//Represents all the properties you wish to add to the vertex};}exportinterfaceEdge{id?:string;label:string;//label for the edgetype:'edge';to:string;//id of vertex from which you want the edge to startfrom:string;//id of vertex to which you want the edge to endproperties?:{[key:string]:any;//Represents all the properties you wish to add to the edge};}Vertex-Edge Format expects you specify an array of vertices and edges
{"vertices":[ {"id":"1","label":"vertexLabel","properties":{"name":"abc" } }, {"id":"2","label":"vertexLabel","properties":{"name":"xyz" } } ],"edges":[ {"label":"friend","from":"1","to":"2","properties": {"value" :3 } } ]}