2017-05-26 1 views
0

Vous essayez de charger un simple fichier de données json dans OrientDB à l'aide de l'utilitaire oetl.sh.Impossible de charger JSON dans la classe OrientDB

Voici mon fichier de données d'entrée (/tmp/databases/test_data1/database.json).

[ 
{ 
    "id": 1, 
    "name" : "xyz" 
}, 
{ 
    "id": 2, 
    "name" : "pqr" 
}, 
{ 
    "id": 3, 
    "name" : "abc" 
} 
] 

Voici mon fichier JSON de configuration (/tmp/json_import_config.json).

{ 
    "config": { 
    "log": "debug" 
}, 
"source" : { 
"file": { "path": "/tmp/databases/test_data1/database.json" } 
}, 
"extractor" : { 
"json": {} 
}, 
"transformers": [ 
    { 
     "log": {} 
    } 
], 
"loader" : { 
    "orientdb": { 
     "dbURL": "plocal:/opt/orientdb/databases/example3", 
     "dbUser": "admin", 
     "dbPassword": "admin", 
     "dbAutoDropIfExists": true, 
     "dbAutoCreate": true, 
     "standardElementConstraints": false, 
     "tx": false, 
     "wal": false, 
     "batchCommit": 1000, 
     "dbType": "document", 
     "classes": [{"name": "Account"}] 
    } 
}, 
"end": [] 
} 

Voici la commande que j'utilise.

./oetl.sh /tmp/json_import_config.json 

est ici la sortie ....

OrientDB etl v.2.2.20 (build 76ab59e72943d0ba196188ed100c882be4315139) https://www.orientdb.com 
[file] INFO Load from file /tmp/databases/test_data1/database.json 
[orientdb] INFO Dropping existent database 'plocal:/opt/orientdb/databases/example3'... 
BEGIN ETL PROCESSOR 
[file] INFO Reading from file /tmp/databases/test_data1/database.json with encoding UTF-8 
Started execution with 1 worker threads 
+ extracted 0 entries (0 entries/sec) - 0 entries -> loaded 0 documents (0 documents/sec) Total time: 1000ms [0 warnings, 0 errors] 
[orientdb] DEBUG - OrientDBLoader: created class 'Account' 
[orientdb] DEBUG orientdb: found 0 documents in class 'null' 
Start extracting 
[0:log] DEBUG Transformer input: {id:1,name:xyz} 
Extraction completed 
[0:log] INFO {id:1,name:xyz} 
[0:log] DEBUG Transformer output: {id:1,name:xyz} 
Pipeline execution halted 

2018-12-06 13:47:41:386 SEVER {db=example3} ETL process halted: com.orientechnologies.orient.etl.OETLProcessHaltedException: Cannot insert new document {id:1,name:xyz} because it has not class [OETLProcessor$OETLPipelineWorker][orientdb] INFO committing 
Pipeline worker done without errors: false 
END ETL PROCESSOR 
+ extracted 3 entries (15 entries/sec) - 3 entries -> loaded 0 documents (0 documents/sec) Total time: 1190ms [0 warnings, 1 errors] 

Besoin d'aide pour résoudre ce problème. J'aimerais aussi savoir si OrientDB est un bon choix pour l'utiliser seulement comme un magasin de documents car il n'a pas trouvé beaucoup de cas d'utilisation autour d'elle. La plupart des cas d'utilisation sont w.r.t. Graphique.

Répondre

1

La configuration est presque correcte, vous devez affecter la classe à chaque document traité par le pipeline. Ajouter un transformateur de champ qui a donné le nom de la classe:

"transformers": [ 
{ 
    "log": {} 
}, 
{ 
    "field": { 
    "fieldName": "@class", 
    "value": "Account" 
    } 
}], 

Je l'ai testé localement, c'est la sortie de la console:

orientdb {db=docDb}> select from Account 

+----+-----+-------+----+----+ 
|# |@RID |@CLASS |id |name| 
+----+-----+-------+----+----+ 
|0 |#25:0|Account|1 |xyz | 
|1 |#26:0|Account|2 |pqr | 
|2 |#27:0|Account|3 |abc | 
+----+-----+-------+----+----+ 

3 item(s) found. Query executed in 0.006 sec(s). 
+0

Merci Roberto pour la réponse. Il ne fonctionne toujours pas après avoir fait le changement suggéré. Je reçois l'erreur suivante. "java.lang.ClassCastException: java.lang.String ne peut pas être converti en com.orientechnologies.orient.core.record.impl.ODocument". Serait-il possible de partager les configurations exactes qui ont fonctionné? – TechEnthusiast

+0

Je viens d'ajouter le transformateur comme montré dans mon extrait. Rien d'autre. –

+0

Merci Roberto ça a marché. J'ai essayé d'éditer votre réponse et de tirer le crochet dans l'extrait de code, mais je n'ai pas réussi à le faire car il fallait modifier 6 caractères. – TechEnthusiast