如何配置OrientDB ETL以导入具有属性

时间:2016-07-08 13:50:52

标签: graph orientdb etl

我有一个包含边列表的CSV,每行一个边。它看起来像这样:

id1id2attr1attr2attrXattrYattrZ

由此,我希望每行能够创建(或更新)以下内容:

A的顶点Xid1和属性attr1B的顶点Xid2和属性attr2 包含边缘属性A->BattrXattrY

的边attrZ

这是我向oetl.sh提供的配置文件(使用OrientDB 2.2 beta2):

{
  "source": { "file": { "path": "/data/sample/test.csv" } },
  "extractor": { "row": {} },
  "transformers" :
  [
  { "csv" : {} },
  { "merge" : { "joinFieldName":"id1", "lookup":"X.id" } },
  { "vertex" : { "class" : "X", "skipDuplicates":true } },
  { "edge" : {
      "unresolvedLinkAction" : "WARNING",
      "class" : "EdgeTypeClass",
      "joinFieldName" : "id2",
      "lookup": "X.id",
      "edgeFields":{"attrX":"${input.attrX}", "attrY":"${input.attrY}","attrZ":"${input.attrZ}"}
   }
  },
  { "field" : { "fieldNames" : [ "id1", "id2", "attr1", "attr2", "attrX", "attrY", "attrZ" ], "operation": "remove" } }
],
"loader": {
  "orientdb": {
      "dbURL": "remote:localhost/test2",
      "dbType": "graph"
    }
  }
}

我用来运行测试的样本数据如下:

10,11,"A","B",100,200,1
11,12,"B","C",110,201,5
12,14,"C","D",90,250,10
14,13,"D","E",105,210,3

当我使用给定的配置和样本数据运行oetl.sh脚本时,它会创建4个顶点而不是5个没有边。顶点上没有任何属性。

所以这些是问题:

  • 顶点子句中是否有一种方法可以指定顶点属性/字段,方法与边缘(即edgeFields)相同?该文档没有提及任何有关它的内容,但你似乎无法做到这一点似乎很奇怪。

  • 我应该明确地创建两个顶点,而不是依赖边创建出站顶点,如果是这样,我如何在配置文件中指定?当我尝试添加两个“顶点”子句时,它似乎只将最后一个作为“当前”顶点。

  • 特定边缘(id1 - > id2)可能已存在。在这种情况下是否可以仅更新边缘属性?

我沉闷的感觉是,考虑到我试图填充的复杂性和数量,编写我自己的ETL(例如使用Java API)而不是依赖oetl会更简单,但我希望如果只是因为它更易于维护,我将能够避免这样做。

0 个答案:

没有答案