我有一个包含边列表的CSV,每行一个边。它看起来像这样:
id1
,id2
,attr1
,attr2
,attrX
,attrY
,attrZ
由此,我希望每行能够创建(或更新)以下内容:
类A
的顶点X
,id1
和属性attr1
类B
的顶点X
,id2
和属性attr2
包含边缘属性A->B
,attrX
,attrY
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会更简单,但我希望如果只是因为它更易于维护,我将能够避免这样做。