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 information
Commands:
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:
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
}
}
]
}