2017-03-27 1 views
1

I가 내가 그 같은 것을 보인다 추적하고있어 일부 데이터 : Label1Label2가에 고유 한 항목을 정의OrientDB의 ETL은 일치 조건에서 여러 필드를 사용하여 가장자리를 만들

node.csv
Label1,Label2 
Alpha,A 
Alpha,B 
Alpha,C 
Bravo,A 
Bravo,B 

쌍을 이 데이터 세트.

I가 내가 Table1에서 만든 정점에 연결할 거기에 일부 값이 다른 테이블 : I가 Data의 항목에서 가장자리를 생성하고 싶습니다

Label1,Label2,Data 
Alpha,A,10 
Alpha,A,20 
Alpha,B,30 
Bravo,A,99 

data.csv을 Node Label1Label2 필드가 모두 일치해야합니다.

이 경우

, 내가 가진 것 : 다른 question에서

Data(Alpha,A,10) ---> Node(Alpha,A) 
Data(Alpha,A,20) ---> Node(Alpha,A) 
Data(Alpha,B,30) ---> Node(Alpha,B) 
Data(Bravo,A,99) ---> Node(Bravo,A) 

그것을이 문제는 단순히 JSON 파일에 추가 "joinFieldName"항목을 추가하여 해결됩니다 나타납니다,하지만 난받지 못했습니다 내 데이터와 같은 결과.

{ 
    "config": { "log": "info" }, 
    "source": { "file": { "path": "./node.csv" } }, 
    "extractor": { "csv": {} }, 
    "transformers": [ { "vertex": { "class": "Node" } } ], 
    "loader": { 
     "orientdb": { 
      "dbURL": "plocal:test.orientdb", 
      "dbType": "graph", 
      "batchCommit": 1000, 
      "classes": [ {"name": "Node", "extends": "V"} ], 
      "indexes": [] 
     } 
    } 
} 

내 data.json 파일은 다음과 같습니다 : 같은

내 node.json 파일이 보인다 나는이를 실행 한 후 나는 결과를 쿼리 할 때

{ 
    "config": { "log": "info" }, 
    "source": { "file": { "path": "./data.csv" } }, 
    "extractor": { "csv": { } }, 
    "transformers": [ 
      { "vertex": { "class": "Data" } }, 
      { "edge": { "class":   "Source", 
          "joinFieldName": "Label1", 
          "lookup":  "Node.Label1", 
          "joinFieldName": "Label2", 
          "lookup":  "Node.Label2", 
          "direction":  "in" 
         } 
      } 
     ], 
    "loader": { 
     "orientdb": { 
      "dbURL": "plocal:test.orientdb", 
      "dbType": "graph", 
      "batchCommit": 1000, 
      "classes": [ {"name": "Data", "extends": "V"}, 
         {"name": "Source", "extends": "E"} 
         ], 
      "indexes": [] 
     } 
    } 
} 

,이 출력을 얻을 :

orientdb {db=test.orientdb}> SELECT FROM V 

+----+-----+------+------+------+-------------------+----+-------------+ 
|# |@RID |@CLASS|Label1|Label2|out_Source   |Data|in_Source | 
+----+-----+------+------+------+-------------------+----+-------------+ 
|0 |#25:0|Node |Alpha |A  |[#41:0,#43:0,#47:0]| |    | 
|1 |#26:0|Node |Alpha |B  |[#45:0]   | |    | 
|2 |#27:0|Node |Alpha |C  |     | |    | 
|3 |#28:0|Node |Bravo |A  |[#42:0,#44:0,#48:0]| |    | 
|4 |#29:0|Node |Bravo |B  |[#46:0]   | |    | 
|5 |#33:0|Data |Alpha |A  |     |10 |[#41:0,#42:0]| 
|6 |#34:0|Data |Alpha |A  |     |20 |[#43:0,#44:0]| 
|7 |#35:0|Data |Alpha |B  |     |30 |[#45:0,#46:0]| 
|8 |#36:0|Data |Bravo |A  |     |99 |[#47:0,#48:0]| 
+----+-----+------+------+------+-------------------+----+-------------+ 

9 item(s) found. Query executed in 0.012 sec(s). 

올바르지 않습니다. 0, # 44 : 0, # 46 : 0, # 47 : 0 : I가 가장자리 # 42 싶지

이것은 변압기 joinFieldName 항목이 OR 연산의 결과로되는 여러 추가 같다
#42:0 connects Node(Bravo,A) and Data(Alpha,A) 
#44:0 connects Node(Bravo,A) and Data(Alpha,A) 
#46:0 connects Node(Bravo,B) and Data(Alpha,B) 
#47:0 connects Node(Alpha,A) and Data(Bravo,A) 

, 하지만 여기서 'AND'를 원합니다.

누구든지 해결 방법을 알고 있습니까? 다른 StackOverflow 질문보다 다르게 무엇을하는지 잘 모르겠습니다 ...

+0

이 문제를 해결 했습니까? 비슷한 문제가 있습니다. –

+0

해결 방법을 찾아서 공유하는 방법을 생각했습니다. –

답변

1

ETL 코드를 디버깅 한 후 해결 방법을 찾았습니다. 당신이 말했듯이, 복수의 joinFieldName을 하나의 가장자리로 만드는 방법은 없습니다. 각 joinFieldName은 가장자리를 만듭니다.

당신은, "Label1을"및 "Label2이"를 연결하여 CSV 파일에 여분의 열을 생성하고 edge 변환, 같은에서 lookup 쿼리를 사용한다 수행 할 수있는, 당신의 data.csv 가정은 label1_label2과 같은 하나 개의 추가 필드가 해당 필드의 값이 "같은 있습니다 LABEL1 ==== label2`.

에지 변환 expand 그렇지 않으면 정점에 잊지 마세요 다음

{ "edge": { "class": "Source", 
       "joinFieldName": "label1_label2", 
       "lookup": "select expand(n) from (match {class: Node, as: n} return n) where n.Label1+'===='+n.Label2 = ?", 
       "direction": "in" 
      } 
} 

을 가져야한다, ETL는 것을 생각한다 하나의 쿼리를 작성하는 것이 트릭입니다. 여러 필드를 연결하고 그에 해당하는 joinFieldName을 전달합니다.

+0

나는 그것을 시험해야 할 것이다. 내 노드를 가져 오기 위해서 "{"field ":"fieldName ":"MergedKey ","expressin ":"Label1.append (':')와 같은 것을 사용하여 키를 연결하는 "필드" Label2 : "}},'My1Key2 : Label1 : Label2'와 같은 항목을 가진"MergedKey "필드를 생성합니다. 그런 다음 내 데이터 항목을 가져 오기 위해 MergeKey 항목을 만드는 것과 동일한 작업을 수행 한 다음 '변압기'섹션에서 가장자리를 만든 후에 필드를 제거했습니다. 그것은 병합 된 키를 유지하면서 내 노드 데이터를 오염시킵니다. 나는이 일을하는 더 깨끗한 방법이 있었으면 좋겠다. – TxAG98

관련 문제