ETL OrientDB 3.0. создание ребра только для первого ряда csv - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь создать ребра между вершинами двух уже загруженных классов вершин A и B, используя OrientDB версии 3.0.12. Класс A имеет id1 как свойство, где хранятся A1, A2, A3 и т. Д., А класс B имеет id2 как свойство, где хранятся B1, B2, B3 и т.д. Ниже приведено описание классов, их свойств и хранимых узлов.

 Class: B
    Property: id2
    B1
    B2
    B3
    B4

    Class: A
    Property: id1
    A1
    A2
    A3
    A4

Я использую CSV-файл (dge.csv) для поиска взаимосвязей между A и B. У A и B может быть несколько связей «многие ко многим» между ними. Ниже приведены несколько примеров строк файла CSV:

fromID  toID
 A1      B1
 A2      B1
 A3      B1
 A1      B3

Однако проблема в том, что ребро создается только для первого ряда вышеуказанного CSV. Пример: ребро создается только между A1 и B1 в приведенном выше примере . Я использую следующий файл JSON для создания края:

{
  "source": { "file": { "path": "../edges.csv" } },
  "extractor": { "csv": {
"separator":"," ,
"columns": ["fromID:String","toID:String"]
                 }  
        },
  "transformers": 
[
{
    "command": {
      "command": "CREATE EDGE relatedto FROM (SELECT FROM A WHERE A.id1 = '${input.fromID}') TO 
(SELECT FROM B WHERE B.id2 = '${input.toID}')",
      "output": "edge"
               }

},
{ 
"field": { "fieldNames": ["fromID", "toID"], "operation": "remove" } 
}
],
  "loader": {
    "orientdb": {
       "dbURL": "plocal:../databases/demodb",
"dbUser": "admin",
"dbPassword": "admin",
       "dbType": "graph",
    "classes": [{"name": "relatedto", "extends": "E"}]
            }
        }
}
...