Créer une base de données avec OrientDb

Implémentation de l'ETL sous OrientDB

Le module ETL sous OrientDB permet de transférer des données vers ou à partir d'une base de données OrientDB à l'aide du processus ETL, présenté comme suite :

  • Configuration : Le module ETL utilise un fichier de configuration, qui est écrit en JSON, pour définir les différents traitements à effectuer avant de charger les données dans la base de données.

  • Extractor : Extrait les données de la base de données source.

  • Transformer : Convertit le format des données sources vers un format accessible à la base de données source.

  • Loader : Charge les données dans la base de données source.

CTRL+C pour copier, CTRL+V pour coller
1
+-----------+-----------------------+-----------+
2
|           |              PIPELINE             |
3
+ EXTRACTOR +-----------------------+-----------+
4
|           |     TRANSFORMERS      |  LOADER   |
5
+-----------+-----------------------+-----------+
6
|   FILE   ==>  CSV->FIELD->MERGE  ==> OrientDB |
7
+-----------+-----------------------+-----------+
+-----------+-----------------------+-----------+
|           |              PIPELINE             |
+ EXTRACTOR +-----------------------+-----------+
|           |     TRANSFORMERS      |  LOADER   |
+-----------+-----------------------+-----------+
|   FILE   ==>  CSV->FIELD->MERGE  ==> OrientDB |
+-----------+-----------------------+-----------+

MéthodeUtilisation

Pour utiliser ce module, il faut tout d'abord localiser le path d'installation d'OrientDB

Après il faut de lancer le script bin/oetl.sh on lui passant le fichier de configuration de votre ETL.

CTRL+C pour copier, CTRL+V pour coller
1
/path/to/orientdb/bin/oetl.sh Patient.json
/path/to/orientdb/bin/oetl.sh Patient.json

SyntaxeSyntaxe du fichier de configuration

CTRL+C pour copier, CTRL+V pour coller
1
{
2
  "config": { "log": "debug" },
3
  "source": { "file": { "path": "/path/to/your/csv/file.csv" } },
4
  "extractor": {
5
     "csv": {
6
       "separator": ",",
7
       "columnsOnFirstLine": true,
8
       "columns": ["<field>:<fieldType>"[,]*]
9
     }
10
  },
11
  "transformers": [
12
    { "vertex": { "class": "<className>" } },
13
    [{ "edge": {
14
        "class": "<className1>",
15
        "joinFieldName": "<joinFiled>",
16
        "lookup": "<className2>.<joinField>",
17
        "direction": "IN | OUT"
18
      }
19
    },]*
20
  ],
21
  "loader": {
22
    "orientdb": {
23
       "dbURL": "remote:localhost/databases/<dbName>",
24
       "dbType": "graph",
25
       "serverUser": "<username>",
26
       "serverPassword": "<password>",
27
       "classes": [
28
         {"name": "<className>", "extends": "V | E | <className>"}[,]*
29
       ], "indexes": [
30
         {"class":"<className>", "fields":[<field>[,]*], "type":"<UNIQUE | fieldType>" }
31
       ]
32
    }
33
  }
34
}
{
  "config": { "log": "debug" },
  "source": { "file": { "path": "/path/to/your/csv/file.csv" } },
  "extractor": {
     "csv": {
       "separator": ",",
       "columnsOnFirstLine": true,
       "columns": ["<field>:<fieldType>"[,]*]
     }
  },
  "transformers": [
    { "vertex": { "class": "<className>" } },
    [{ "edge": {
        "class": "<className1>",
        "joinFieldName": "<joinFiled>",
        "lookup": "<className2>.<joinField>",
        "direction": "IN | OUT"
      }
    },]*
  ],
  "loader": {
    "orientdb": {
       "dbURL": "remote:localhost/databases/<dbName>",
       "dbType": "graph",
       "serverUser": "<username>",
       "serverPassword": "<password>",
       "classes": [
         {"name": "<className>", "extends": "V | E | <className>"}[,]*
       ], "indexes": [
         {"class":"<className>", "fields":[<field>[,]*], "type":"<UNIQUE | fieldType>" }
       ]
    }
  }
}

Exemple

Supposant qu'on a une base de données relationnelle représentée par les deux tables suivantes et qu'on veut la transformer en une base de données OrientDB.

CTRL+C pour copier, CTRL+V pour coller
1
TABLE Student:
2
+----+----------------+
3
| id | studentName    |
4
+----+----------------+
5
| 1  | Student 1      |
6
| 2  | Student 2      |
7
+----+----------------+
8
9
Student.csv
10
id,studentName
11
1,Student 1
12
2,Student 2
TABLE Student:
+----+----------------+
| id | studentName    |
+----+----------------+
| 1  | Student 1      |
| 2  | Student 2      |
+----+----------------+

Student.csv
id,studentName
1,Student 1
2,Student 2
CTRL+C pour copier, CTRL+V pour coller
1
TABLE UV:
2
+----+-----------+--------------+
3
| id | studentId | uvName       |
4
+----+-----------+--------------+
5
|  0 |    1      | AI07         |
6
|  1 |    2      | AI07         |
7
| 10 |    1      | AI15         |
8
| 35 |    1      | AI05         |
9
+----+-----------+--------------+
10
11
Uv.csv
12
id,studentId,uvName
13
0,1,AI07
14
1,2,AI07
15
10,1,AI15
16
35,1,AI05
TABLE UV:
+----+-----------+--------------+
| id | studentId | uvName       |
+----+-----------+--------------+
|  0 |    1      | AI07         |
|  1 |    2      | AI07         |
| 10 |    1      | AI15         |
| 35 |    1      | AI05         |
+----+-----------+--------------+

Uv.csv
id,studentId,uvName
0,1,AI07
1,2,AI07
10,1,AI15
35,1,AI05

Fichier de configuration pour la table Student

CTRL+C pour copier, CTRL+V pour coller
1
{
2
  "config": {
3
    "log": "debug"
4
  },
5
  "source": { "file": { "path": "/path/to/your/csv/file/Student.csv" } },
6
  "extractor": {
7
    "csv": {
8
      "separator": ",",
9
      "columnsOnFirstLine": true,
10
      "columns": ["id:Integer","studentName:String"]
11
    }
12
  },
13
  "transformers": [
14
    { "vertex": { "class": "Student" } }
15
  ],
16
  "loader": {
17
    "orientdb": {
18
       "dbURL": "remote:localhost/databases/StudentDB",
19
       "dbType": "graph",
20
       "serverUser": "root",
21
       "serverPassword": "root",
22
       "classes": [
23
         {"name": "Uv", "extends": "V"},
24
         {"name": "Student", "extends": "V"},
25
         {"name": "HasUvs", "extends": "E"},
26
       ],
27
       "indexes": [
28
         {"class":"Student", "fields":["id:integer"], "type":"UNIQUE" }
29
       ]
30
    }
31
  }
32
}
33
{
  "config": {
    "log": "debug"
  },
  "source": { "file": { "path": "/path/to/your/csv/file/Student.csv" } },
  "extractor": {
    "csv": {
      "separator": ",",
      "columnsOnFirstLine": true,
      "columns": ["id:Integer","studentName:String"]
    }
  },
  "transformers": [
    { "vertex": { "class": "Student" } }
  ],
  "loader": {
    "orientdb": {
       "dbURL": "remote:localhost/databases/StudentDB",
       "dbType": "graph",
       "serverUser": "root",
       "serverPassword": "root",
       "classes": [
         {"name": "Uv", "extends": "V"},
         {"name": "Student", "extends": "V"},
         {"name": "HasUvs", "extends": "E"},
       ],
       "indexes": [
         {"class":"Student", "fields":["id:integer"], "type":"UNIQUE" }
       ]
    }
  }
}

Dans la partie source, on indique le path vers le fichier CSV source.

Dans la partie extractor, on mentionne le type de l'extracteur à utiliser, dans cette exemple, c'est un CSV Extractor. Il y a plusieurs format supportés : Row, JDBC, JSON, XML.

Dans la partie transformers, on indique la classe vertex à utiliser.

Dans la partie loader, on indique le nom, path et les informations d'identification liée à la base de données qu'on souhaite utiliser, et on indique également les classes à créer si elles n'existe pas.

Fichier de configuration pour la table Uv

CTRL+C pour copier, CTRL+V pour coller
1
{
2
  "config": {
3
    "log": "debug"
4
  },
5
  "source": { "file": { "path": "/path/to/your/csv/file/Uv.csv" } },
6
  "extractor": {
7
    "csv": {
8
      "separator": ",",
9
      "columnsOnFirstLine": true,
10
      "columns": ["id:Integer","studentName:String"]
11
    }
12
  },
13
  "transformers": [
14
    { "vertex": { "class": "Uv" } },
15
    { "edge":
16
      {
17
        "class": "HasUvs",
18
        "joinFieldName": "studentId",
19
        "lookup": "Student.id",
20
        "direction": "in"
21
      }
22
  }],
23
  "loader": {
24
    "orientdb": {
25
       "dbURL": "remote:localhost/databases/StudentDB",
26
       "dbType": "graph",
27
       "serverUser": "root",
28
       "serverPassword": "root",
29
       "classes": [
30
         {"name": "Uv", "extends": "V"},
31
         {"name": "Student", "extends": "V"},
32
         {"name": "HasUvs", "extends": "E"},
33
       ],
34
       "indexes": [
35
         {"class":"Uv", "fields":["id:integer"], "type":"UNIQUE" }
36
       ]
37
    }
38
  }
39
}
40
{
  "config": {
    "log": "debug"
  },
  "source": { "file": { "path": "/path/to/your/csv/file/Uv.csv" } },
  "extractor": {
    "csv": {
      "separator": ",",
      "columnsOnFirstLine": true,
      "columns": ["id:Integer","studentName:String"]
    }
  },
  "transformers": [
    { "vertex": { "class": "Uv" } },
    { "edge":
      {
        "class": "HasUvs",
        "joinFieldName": "studentId",
        "lookup": "Student.id",
        "direction": "in"
      }
  }],
  "loader": {
    "orientdb": {
       "dbURL": "remote:localhost/databases/StudentDB",
       "dbType": "graph",
       "serverUser": "root",
       "serverPassword": "root",
       "classes": [
         {"name": "Uv", "extends": "V"},
         {"name": "Student", "extends": "V"},
         {"name": "HasUvs", "extends": "E"},
       ],
       "indexes": [
         {"class":"Uv", "fields":["id:integer"], "type":"UNIQUE" }
       ]
    }
  }
}

Ce fichier est similaire au précédent, sauf que dans la partie transformers, on a rajouté un Edge transformer pour représenter la liaison entre les deux classes.

PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Kamal Bennani Bouchiba, Samuel Reymondet, Clémence Geffray, 2014-2016 (Contributions : Stéphane Crozat, les étudiants de l'UTC) Réalisé avec Scenari (nouvelle fenêtre)