2015-02-08 108 views
1

我正在试图从我一直在MongoDB中保存的大型数据集中进行ETL导入。我已经成功地导入了顶点,并且我觉得自己是一个小语法,也不会从导入边缘时产生误解。

我敢肯定,错误的是在这个变压器:

{"edge":{"class":"Friend", "joinFieldName":"id", 
    "lookup": "select from Character WHERE $input.id IN character_friends", 
    "unresolvedLinkAction":"CREATE"}}, 

那么我现在要做的是,使边缘与ID文件= FOO到包含FOO的所有其他文件在他们的character_friends数组中。 如果我在浏览器中执行

select from Character WHERE FOO IN character_friends 

,我得到一吨的文件,所以我的猜测是,我的问题是$ input.id要么不返回ID我期待,或可能不被认可作为一个变量。

文件看起来像这样:

{ 
    id: FOO, 
    character_friends: [BAR, BAZ, QUX] 
    (and a bunch of other junk) 
} 

回答

2

看来你要插入一个属性“ID”,但它在蓝图的标准保留。你可以将其重命名(与“场”变压器)或设置在这个东方装载机:

standardElementConstraints: false, 

然后我创建这个内容的文件/temp/datasets/charles.json:

[ 
{ 
    name: "Joe", 
    id: 1, 
    friends: [2,4,5], 
    enemies: [6] 
}, 
{ 
    name: "Suzie", 
    id: 2, 
    friends: [1,4,6], 
    enemies: [5,2] 
} 
] 

而且这条管道:

{ 
    config: { 
    log: "debug", 
    parallel: false 
    }, 
    source : { 
    file: { path: "/temp/datasets/charles.json", lock : true } 
    }, 
    extractor : { 
    json: {} 
    }, 
    transformers : [ 
    { merge: { joinFieldName:"id", lookup:"Account.id" } }, 
    { vertex: { class: "Account"} }, 
    { edge: { 
     "class": "Friend", 
     "joinFieldName": "friends", 
     "lookup": "Account.id", 
     "unresolvedLinkAction": "CREATE" 
    } }, 
    { edge: { 
     "class": "Enemy", 
     "joinFieldName": "enemies", 
     "lookup": "Account.id", 
     "unresolvedLinkAction": "CREATE" 
    } } 
    ], 
    loader : { 
    orientdb: { 
     dbURL: "plocal:/temp/databases/charles", 
     dbUser: "admin", 
     dbPassword: "admin", 
     dbAutoDropIfExists: true, 
     dbAutoCreate: true, 
     standardElementConstraints: false, 
     tx: false, 
     wal: false, 
     batchCommit: 1000, 
     dbType: "graph", 
     classes: [{name: 'Account', extends:"V"}, {name: 'Friend', extends:"E"}, {name: 'Enemy', extends:"E"}], 
     indexes: [{class:"Account", fields:["id:integer"], type:"UNIQUE_HASH_INDEX" }] 
    } 
    } 
} 

确保有使用ETL罐子的最后一个版本与默认版本(替换它在$ ORIENTDB/lib目录)。最后一个版本是从下载:

https://oss.sonatype.org/content/repositories/snapshots/com/orientechnologies/orientdb-etl/2.0.2-SNAPSHOT/orientdb-etl-2.0.2-20150208.225903-1.jar

或者得到OrientDB ETL的主要2.0.2。