2015-08-27 6 views
1

У меня есть простая древовидная структура в таблице MySQL (id, parentId) с примерно 3 миллионами вершин и вы хотите импортировать ее в базу данных OrientDB Graph. Импортер ETL импортирует вершины плавно, но не может создавать ребра (NullPointerException). ETL даже не работает в простой базе данных с приведенными примерами в документации (http://orientdb.com/docs/last/Import-a-tree-structure.html выбрасывает одно и то же исключение), поэтому я просто импортировал вершины и хотел создать ребра вручную.OrientDB: Создать края с подзапросом

У меня есть класс (адрес) Вершины с двумя свойствами (id, parentId), и я хочу создать грани между этими вершинами (parentId -> id). Есть ли простой способ сделать это вместо того, чтобы вставлять ребра в цикл? Что-то, как в SQL

INSERT INTO E (out, in) VALUES (SELECT parentId, id FROM Address) 

Поскольку края должны быть созданы только с СОЗДАТЬ EDGE, я думаю OrientDB не поддерживает такую ​​операцию по умолчанию. Но, возможно, есть обходное решение для создания этих 3 миллионов ребер?

Я нашел его легко создать связь между двумя записями:

CREATE LINK parentLink TYPE LINK FROM Address.parentId TO Address.Id 

Однако, я не могу создать Ребра таким образом. Я пробовал работать с переменными

CREATE EDGE isParentOf FROM (SELECT FROM Address) TO (SELECT FROM Address WHERE id = $current.parentId) 

Но это не работает.

+0

Вы уже создали вопрос о ETL проекта? Какой выпуск вы используете? – Lvca

+0

Нет, я создам проблему в проекте ETL на следующей неделе. Я использую community db community edition 2.1. – Stephan

ответ

-1

Вы пробовали это ETL JSon:

{ 
    "config": {"log": "debug", "parallel": true },  
    "extractor" : { 
    "jdbc": { "driver": "oracle.jdbc.driver.OracleDriver", 
       "url": "jdbc:oracle:thin:hostname/db",  
       "userName": "username",  
       "userPassword": "password",  
       "query": "select id, A.parentId from Address a where rownum<2"  }  
    },  
    "transformers": [`enter code here` 

    { "vertex": { "class": "Address" }}, 

    { "edge": { "class": "isParentOf", 
     "joinFieldName": "parentId", 
     "lookup": "Address.Id", 
     "direction": "in", 
     "skipDuplicates":true 
    } 
    } 
    ], 
    "loader": { 
    "orientdb": { 
     "dbURL": "remote:server/db", 
     "dbUser": "user", 
     "dbPassword": "passwd!", 
     "dbType": "graph", 
     "classes": [ 
     {"name": "Address", "extends": "V"}, 
     {"name": "isParentOf", "extends": "E"} 
     ], "indexes": [ 
     {"class":"Address", "fields":["ID:string"], "type":"UNIQUE" } 
     ] 
    } 
    } 
} 
+0

. Проверьте свой ответ и исправьте включенный JSON. – Eldelshell

Смежные вопросы