2016-04-12 15 views
0

文書では、csvのetlは1つから多くの機能を使用していますが、私はそれを多くから多くに拡張したいと思います。そこで私は3つの設定を行いました.1つは投稿用、1つはコメント用、もう1つは関係用です。投稿とコメントは大丈夫ですが、私が関係を開始したとき、私はこのエラーを受けました、何が間違っているのですか?一つの可能​​な解決策があるかもしれないetlと多対多の関係

commentId,postId 
    0,10 
    1,10 
    21,10 
    41,20 
    82,20  

    { 
    "source": { "file": { "path": "/tmp/relation.csv" } }, 
    "extractor": { "csv": {} }, 
     "transformers": [ 
     { "edge": 
      { "class": "HasComments", "joinFieldName": "postId", "lookup": "Post.id", "direction": "out"}, 
      { "class": "HasComments", "joinFieldName": "commentId", "lookup": "Comment.id", "direction": "in"} 
     } 
     ], 
     "loader": { 
     "orientdb": { 
      "dbURL": "plocal:/tmp/test", 
      "dbType": "graph", 
      "classes": [ 
      {"name": "Post", "extends": "V"}, 
      {"name": "Comment", "extends": "V"}, 
      {"name": "HasComments", "extends": "E"} 
      ], 
      "indexes": [ 
      {"class":"Post", "fields":["id:integer"], "type":"UNIQUE" }, 
      {"class":"Comment", "fields":["id:integer"], "type":"UNIQUE" } 
      ] 
     } 
     } 
    } 

    OrientDB etl v.2.1.9-SNAPSHOT (build [email protected]; 2016-01-07 10:51:24+0000) www.orientdb.com 
    BEGIN ETL PROCESSOR 
    [file] INFO Reading from file /tmp/relation.csv with encoding UTF-8 
    Error in Pipeline execution: com.orientechnologies.orient.etl.transformer.OTransformException: edge: input type '[email protected]e7e3' is not supported 
    ETL process halted: com.orientechnologies.orient.etl.OETLProcessHaltedException: Halt 
    Exception in thread "main" com.orientechnologies.orient.etl.OETLProcessHaltedException: Halt 
    at com.orientechnologies.orient.etl.OETLPipeline.execute(OETLPipeline.java:149) 
    at com.orientechnologies.orient.etl.OETLProcessor.executeSequentially(OETLProcessor.java:448) 
    at com.orientechnologies.orient.etl.OETLProcessor.execute(OETLProcessor.java:255) 
    at com.orientechnologies.orient.etl.OETLProcessor.main(OETLProcessor.java:109) 
    Caused by: com.orientechnologies.orient.etl.transformer.OTransformException: edge: input type '[email protected]e7e3' is not supported 
    at com.orientechnologies.orient.etl.transformer.OEdgeTransformer.executeTransform(OEdgeTransformer.java:107) 
    at com.orientechnologies.orient.etl.transformer.OAbstractTransformer.transform(OAbstractTransformer.java:37) 
    at com.orientechnologies.orient.etl.OETLPipeline.execute(OETLPipeline.java:115) 
    ... 3 more 
+0

が存在するかどうかを確認するために、このコードを使用することができます。 使用しているOrientDbのバージョンは何ですか? –

答えて

0

、そのJSONファイルを介してポストやコメントのクラスをインポートした後、あなたはあなたがこれらのレコードを取得します別のJSONファイルを使用して、クラスの関係

{ 
    "source": { "file": { "path": "/tmp/relation.csv" } }, 
    "extractor": { "row": {} }, 
    "transformers": [ 
     { "csv": { "separator": ","} 
     }, 
     { "vertex": { "class": "Relation" } } 
    ], 
    "loader": { 
     "orientdb": { 
      "dbURL": "plocal:/tmp/test", 
      "dbType": "graph", 
      "classes": [ 
       {"name": "Post", "extends": "V"}, 
       {"name": "Comment", "extends": "V"}, 
       {"name": "Relation", "extends": "V"}, 
       {"name": "HasComments", "extends": "E"} 
      ], 
      "indexes": [ 
       {"class":"Post", "fields":["id:integer"], "type":"UNIQUE" }, 
       {"class":"Comment", "fields":["id:integer"], "type":"UNIQUE" } 
      ] 
     } 
    } 
} 

をインポートすることができます。

enter image description here

あなたは次のような構造を得ることができます以下のjavascript関数

var g=orient.getGraphNoTx(); 
var relation = g.command("sql","select from Relation"); 
for(i=0;i<relation.length;i++){ 
var relationMM=g.command("sql","select postId , commentId from "+ relation[i].getId()); 
var idPost=relationMM[0].getProperty("postId"); 
var idComment=relationMM[0].getProperty("commentId"); 
var post=g.command("sql","select from Post where id = " + idPost); 
var comment=g.command("sql","select from Comment where id = " + idComment); 
g.command("sql","create edge HasComments from " + post[0].getId() + " to " + comment[0].getId()); 
} 
g.command("sql","drop class Relation unsafe"); 

を使用します。

enter image description here

これはあなたのグラフになります。

enter image description here

UPDATE

あなたは縁がすでに私は多くの多くのあなたの関係のためのJavaScript関数をやっている

var counter=g.command("sql","select count(*) from HasComments where out=" + post[0].getId() + " and in=" + comment[0].getId()); 
if(counter[0].getProperty("count")==0){ 
    g.command("sql","create edge HasComments from " + post[0].getId() + " to " + comment[0].getId()); 
} 
+0

ありがとうたくさんの作品が素晴らしい!しかし、スクリプトで作成する前にエッジが存在するかどうかをテストしたい場合は、どのようにして制約を追加できますか?私はETLを使って毎日新しい頂点とエッジをプライマリデータベースから追​​加したいので、関数スクリプトを2回起動するとダブルエッジになります – jrweb247

+0

@ jrweb247 "g"を持っていれば –

+0

をお知らせします。 "+ post [0] .getId()+"から "+ comment [0] .getId());にエッジHasCommentsを削除する"削除が静かに失敗したために作成する直前 – jrweb247