2016-06-14 5 views
2

私は通信グラフを作成しています。
各メッセージにはmsgidがあり、各ユーザーにはユーザーIDがあります。
私はすでにメッセージ頂点を作成しましたが、ユーザー頂点とメッセージ頂点をユーザー頂点に接続するエッジを作成したいと思います。
ユーザーは複数のメッセージを受け取ることができます(明らかに)。
私のファイルが含まれています
MSGID、ユーザーID、(および他のいくつかの情報私はエッジに割り当てます)OrientDB ETL:重複した頂点をスキップしてエッジを作成する方法

私が午前isssueユーザーが複数のメッセージを取得することができますので、私のファイルに私は(重複ユーザーIDを持っているということです)、私はskipDuplicatesので、ユーザーIDを持つ別の頂点を作成したくないです。しかし、私が重複をスキップする場合、エッジも作成されません。私は、各エッジが1つのメッセージを表すのと同じユーザー頂点に複数のエッジが必要です。

ユーザの頂点を一意に保つが、エッジを作成するにはどうすればよいですか?

私が上で詳述したものを除いて、うまく動作する私の現在のETL .jsonファイル。

{ 
"source": { "file": { "path": "msgs.txt" } }, 
    "extractor": { "row": {} }, 
    "transformers": [ 
    { "csv": {"separator": "\t"} }, 
     { "vertex": { "class": "user", "skipDuplicates": true } }, 
    { "edge": { "class": "sent_to", "joinFieldName": "msgid", "lookup":"message.id","direction": "in" } }, 
    "edgeFields": { "n": "${input.n}" } 


    ], 
    "loader": { 
    "orientdb": { 
     "dbURL": "remote:/localhost/databases/communication", 
     "dbType": "graph", 
     "classes": [ 
     {"name": "user", "extends": "V"}, 
     {"name": "message", "extends": "V"}, 
     {"name": "sent_to",  "extends": "E"} 
     ], "indexes": [ 
     {"class":"user", "fields":["id"], "type":"UNIQUE" } 
     ] 
    } 
    } 
} 

答えて

2

これは私がやったことであり、うまくいきました。
最初にメッセージの頂点を作成しました(前述のqのように)。
次に、ユーザーの頂点を作成しました。
はその後、それらの間にエッジを作成するために、私は、複数のエッジがあった場合でも、これはすべてのエッジを作成した{ユーザーID、MSGID、...}

{ 

    "source": { "file": { "path": "msgs1.txt" } }, 
    "extractor": { "row": {} }, 
    "transformers": [ 
    { "csv": {"separator": "\t"} }, 
    { "merge": {"joinFieldName": "userid", "lookup": "user.id"} }, 
    { "vertex": { "class": "user", "skipDuplicates": true } }, 
    { "edge": { "class": "sent_to", 
       "joinFieldName": "msgid", 
       "lookup":"message.id", 
       "direction": "in", 
       "edgeFields": { "n": "${input.n}", "date": "${input.date}"} 
       } 
    } 

    ], 
    "loader": { 
    "orientdb": { 
     "dbURL": "remote:/localhost/databases/communication", 
     "dbType": "graph", 
     "classes": [ 
     {"name": "user", "extends": "V"}, 
     {"name": "message", "extends": "V"}, 
     {"name": "sent_to",  "extends": "E"} 
     ], 
     "indexes": [ 
     ] 
    } 
    } 
} 

を持っていたファイルに、次のETLを実行しましたユーザーを指しています。
うまくいけば、誰かを助けるでしょう

+0

入力データの数行を投稿できますか? – Pete

関連する問題