OrientDB从查询的ETL边缘查找 - 如何访问$输入?
问题描述:
我正在试图从我一直在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)
}
答
看来你要插入一个属性“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目录)。最后一个版本是从下载:
或者得到OrientDB ETL的主要2.0.2。