ETL - Import from RDBMS

Most of DBMSs support JDBC driver. All you need is to gather the JDBC driver and put it in classpath or simply in the $ORIENTDB_HOME/lib directory.

With the configuration below all the records from the table "Client" are imported in OrientDB from MySQL database.

Example importing a flat table

{ "config": { "log": "debug" }, "extractor" : { "jdbc": { "driver": "com.mysql.jdbc.Driver", "url": "jdbc:mysql://localhost/mysqlcrm", "userName": "root", "userPassword": "", "query": "select * from Client" } }, "transformers" : [ { "vertex": { "class": "Client"} } ], "loader" : { "orientdb": { "dbURL": "plocal:/temp/databases/orientdbcrm", "dbAutoCreate": true } } }

Example loading records from 2 connected tables

With this example we want to import a database that contains Blog posts in the following tables:

  • Authors, in TABLE Author, with the following columns: id and name
  • Posts, in TABLE Post, with the following columns: author_id, title and text

To import them into OrientDB we'd need 2 ETL processes.

Importing of Authors

{ "config": { "log": "debug" }, "extractor" : { "jdbc": { "driver": "com.mysql.jdbc.Driver", "url": "jdbc:mysql://localhost/mysql", "userName": "root", "userPassword": "", "query": "select * from Author" } }, "transformers" : [ { "vertex": { "class": "Author"} } ], "loader" : { "orientdb": { "dbURL": "plocal:/temp/databases/orientdb", "dbAutoCreate": true } } }

Importing of Posts

{ "config": { "log": "debug" }, "extractor" : { "jdbc": { "driver": "com.mysql.jdbc.Driver", "url": "jdbc:mysql://localhost/mysql", "userName": "root", "userPassword": "", "query": "select * from Post" } }, "transformers" : [ { "vertex": { "class": "Post"} }, { "edge": { "class": "Wrote", "direction" : "in", "joinFieldName": "author_id", "lookup":"Author.id", "unresolvedLinkAction":"CREATE"} } ], "loader" : { "orientdb": { "dbURL": "plocal:/temp/databases/orientdb", "dbAutoCreate": true } } }

Note the edge configuration has the direction as "in", that means starts from the Author and finishes to Post.