2016-09-15 2 views
2

с одним соединениемFieldName и поиском Edge transformer отлично работает. Однако теперь требуется два ключа, т. Е. Составной индекс в поиске. Как можно указать два имени соединенияFieldNames?OrientDB ETL Edge transformer 2 joinFieldName (s)

Это сценарий (после обработки) версия: Создать край Расширяет из (выбрать из MC, где образец = 1 и MKEY = 6) (выбрать из Event, где образец = 1 и MCL = 6).

Это работает, но не подходит для производства.

Может ли кто-нибудь помочь?

ответ

3

вы можете просто добавить 2 joinFieldName (ы) как

{ "edge": { "class": "Conn", 
       "joinFieldName": "b1", 
       "lookup": "A.a1", 
       "joinFieldName": "b2", 
       "lookup": "A.a2", 
       "direction": "out" 
      }} 

см ниже мои тестовые данных:

json1.json

{ 
    "source": { "file": { "path": "/home/ivan/Scrivania/cose/etl/stak39517796/data1.csv" } }, 
    "extractor": { "csv": {} }, 
    "transformers": [ 
    { "vertex": { "class": "A" } } 
    ], 
    "loader": { 
    "orientdb": { 
     "dbURL": "plocal:/home/ivan/OrientDB/db_installati/enterprise/orientdb-enterprise-2.2.10/databases/stack39517796", 
     "dbType": "graph", 
     "dbAutoCreate": true, 
     "classes": [ 
     {"name": "A", "extends": "V"}, 
     {"name": "B", "extends": "V"}, 
     {"name": "Conn", "extends": "E"} 
     ] 
    } 
    } 
} 

json2.json

{ 
    "source": { "file": { "path": "/home/ivan/Scrivania/cose/etl/stak39517796/data2.csv" } }, 
    "extractor": { "csv": {} }, 
    "transformers": [ 
    { "vertex": { "class": "B" } }, 
    { "edge": { "class": "Conn", 
       "joinFieldName": "b1", 
       "lookup": "A.a1", 
       "joinFieldName": "b2", 
       "lookup": "A.a2", 
       "direction": "out" 
      }} 
    ], 
    "loader": { 
    "orientdb": { 
     "dbURL": "plocal:/home/ivan/OrientDB/db_installati/enterprise/orientdb-enterprise-2.2.10/databases/stack39517796", 
     "dbType": "graph", 
     "dbAutoCreate": true, 
     "classes": [ 
     {"name": "A", "extends": "V"}, 
     {"name": "B", "extends": "V"}, 
     {"name": "Conn", "extends": "E"} 
     ] 
    } 
    } 
} 

data1.csv

a1,a2 
1,1 
1,2 
2,3 

data2.csv заказ

b1,b2 
1,1 
2,3 
1,2 

исполнение:

  1. json1
  2. json2

и вот окончательный результат:

orientdb {db=stack39517796}> select from v           

+----+-----+------+----+----+-------+----+----+--------+ 
|# |@RID |@CLASS|a1 |a2 |in_Conn|b2 |b1 |out_Conn| 
+----+-----+------+----+----+-------+----+----+--------+ 
|0 |#17:0|A  |1 |1 |[#25:0]| | |  | 
|1 |#18:0|A  |1 |2 |[#27:0]| | |  | 
|2 |#19:0|A  |2 |3 |[#26:0]| | |  | 
|3 |#21:0|B  | | |  |1 |1 |[#25:0] | 
|4 |#22:0|B  | | |  |3 |2 |[#26:0] | 
|5 |#23:0|B  | | |  |2 |1 |[#27:0] | 
+----+-----+------+----+----+-------+----+----+--------+ 
+0

Отличная помощь Иван! Mille Grazie – Tore

+0

@ ivan-mainetti Я не уверен, что это работает ... если вы добавите «2,1» в data1.csv и в data2.csv, результат будет генерировать дополнительные ребра из b (1,1) в a (1,1) и a (2,1). Я думаю, что это только совпадение в последнем поле соединения, а не выполнение операции ** AND **. – TxAG98

+0

@ ivan-mainetti Я просмотрел его немного больше, и я думаю, что это работает только в вашем примере, потому что a2 и b2 уникальны. Вторая запись «joinFieldName» в json2.json будет [разбить первый, не вызывая ошибки ...] (http://stackoverflow.com/questions/5306741/do-json-keys-need-to-be- уникальный) Если вы запустите это с помощью отладки, вы увидите, что он соответствует только от a2 до b2. – TxAG98

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