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

OrientDB ETL:如何跳过重复顶点但创建边,orientdb,orientdb-etl,Orientdb,Orientdb Etl,我正在创建一个通信图。 每条消息都有一个msgid,每个人都有一个userid。 我已经创建了消息顶点,现在我要创建用户顶点和将消息顶点连接到用户顶点的边。 一个用户可以收到多条消息(显然)。 我的文件包含: msgid、userid(以及我将分配给边缘的一些其他信息) 我遇到的问题是,在我的文件中,我有重复的用户id(因为用户可以获得多条消息),我不想用用户id创建另一个顶点,所以我跳过了重复。但是,如果我跳过重复,也不会创建边。我确实希望同一用户顶点有多条边,因为每条边代表一条消息 如何在创

我正在创建一个通信图。
每条消息都有一个msgid,每个人都有一个userid。
我已经创建了消息顶点,现在我要创建用户顶点和将消息顶点连接到用户顶点的边。
一个用户可以收到多条消息(显然)。
我的文件包含:
msgid、userid(以及我将分配给边缘的一些其他信息)

我遇到的问题是,在我的文件中,我有重复的用户id(因为用户可以获得多条消息),我不想用用户id创建另一个顶点,所以我跳过了重复。但是,如果我跳过重复,也不会创建边。我确实希望同一用户顶点有多条边,因为每条边代表一条消息

如何在创建边的同时保持用户顶点的唯一性

我当前的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中)。
然后我创建了用户顶点。
然后,为了在它们之间创建边缘,我在一个具有{userid,msgid,…}的文件上运行了以下ETL

{

  "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": [
       ]
    }
  }
}
这将创建所有边,即使有多条边指向用户。

希望这会对某人有所帮助

您能发布几行输入数据吗?