OrientDB ETL:如何跳过重复的顶点,但创建边缘

问题描述:

我正在创建一个通信图。
每条消息都有一个msgid,每个人都有一个userid。
我已经创建了消息顶点,现在我想创建用户顶点和将消息顶点连接到用户顶点的边。
用户可以获得多条消息(显然)。
我的文件包括:
MSGID,用户ID,(和其他一些信息,我会分配到边缘)OrientDB ETL:如何跳过重复的顶点,但创建边缘

是我遇到的isssue的是,在我的文件,我有重复的用户ID(因为用户可以得到多条消息),我不想用用户ID创建另一个顶点,所以我skipDuplicates。但如果我跳过重复的边缘也不会创建。我确实需要多条边到同一个用户顶点,因为每条边代表一条消息。

我如何保持用户顶点唯一但创建边缘?

我目前的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" } 
     ] 
    } 
    } 
} 

好的,这是我做的,它似乎工作。
首先我创建了消息顶点(如上所述,在q中)。
然后我创建了用户顶点。
然后创建边缘,它们之间我跑的是有一个文件的以下ETL {用户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": [ 
     ] 
    } 
    } 
} 

这创造了所有的边缘,即使有一个以上的边缘指向用户。
希望这会帮助别人

+0

你能发表几行输入数据吗? – Pete