我有兴趣从一些包含WGS84 Lat / Long空间坐标的CSV文件中将一些数据加载到OrientDB中。
我正在使用OrientDB 2.2.8并将most_fields添加到我的$ ORIENTDB_HOME / lib目录中。
我正在使用ETL将数据加载到数据库中,并希望添加空间索引,但我不知道如何执行此操作。
说我的CSV文件包含以下列:
我在我的ETL中试过这个:
"loader": {
"orientdb": {
"dbURL": "plocal:myDatabase.orientdb",
"dbType": "graph",
"batchCommit": 1000,
"classes": [ { "name": "vertex", "extends", "V" } ],
"indexes": [ { "class": "vertex", "fields":["Label:string"], "type":"UNIQUE" },
{ "class": "Label", "fields":["Latitude:float","Longitude:float"], "type":"SPATIAL" }
]
}
}
但它不起作用。我收到以下错误消息:
ETL process has problem: com.orientechnologies.orient.core.index.OIndexException: Index with type SPATIAL and algorithm null does not exist.
有没有人研究过通过ETL创建空间索引?我在这上面看到的大部分内容都是使用Java或lucene spatial module。
提前感谢任何建议。
答案 0 :(得分:0)
我能够使用legacy spatial capabilities加载它。
我整理了一个cheezy数据集,其中包含一些Nazca线geoglyphs的坐标:
Name,Latitude,Longitude
Hummingbird,-14.692131,-75.148892
Monkey,-14.7067274,-75.1475391
Condor,-14.6983457,-75.1283374
Spider,-14.694363,-75.1235815
Spiral,-14.688309,-75.122757
Hands,-14.694459,-75.113881
Tree,-14.693897,-75.114467
Astronaut,-14.745222,-75.079755
Dog,-14.706401,-75.130788
我使用脚本创建了我的GeoGlyph类createVertexGeoGlyph.osql
:
set echo true
connect PLOCAL:./nazca.orientdb admin admin
CREATE CLASS GeoGlyph EXTENDS V CLUSTERS 1
CREATE PROPERTY GeoGlyph.Name STRING
CREATE PROPERTY GeoGlyph.Latitude FLOAT
CREATE PROPERTY GeoGlyph.Longitude FLOAT
CREATE PROPERTY GeoGlyph.Tag EMBEDDEDSET STRING
CREATE INDEX GeoGlyph.index.Location ON GeoGlyph(Latitude,Longitude) SPATIAL ENGINE LUCENE
我使用
加载到我的数据库中$ console.sh createVertexGeoGlyph.osql
我是这样做的,因为它似乎对我来说更加一致。当我希望它能够关闭CSV导入时,我在使ETL引擎创建定义的属性方面遇到了一些困难。有时它想合作并创造我的财产,其他时候也有麻烦。
因此,获取数据的下一步是为ETL过程创建我的.json文件。我喜欢制作两个,一个是文件特定的,另一个是常见文件,因为我经常有跨多个文件的数据集。
首先,我有一个nazca_liens.json
文件:
{
"config": {
"log": "info",
"fileDirectory": "./",
"fileName": "nazca_lines.csv"
}
}
接下来是commonGeoGlyph.json
文件:
{
"begin": [
{ "let": { "name": "$filePath", "expression": "$fileDirectory.append($fileName )" } },
],
"config": { "log": "debug" },
"source": { "file": { "path": "$filePath" } },
"extractor":
{
"csv": { "ignoreEmptyLines": true,
"nullValue": "N/A",
"separator": ",",
"columnsOnFirstLine": true,
"dateFormat": "yyyy-MM-dd"
}
},
"transformers": [
{ "vertex": { "class": "GeoGlyph" } },
{ "code": { "language":"Javascript",
"code": "print('>>> Current record: ' + record); record;" }
}
],
"loader": {
"orientdb": {
"dbURL": "plocal:nazca.orientdb",
"dbType": "graph",
"batchCommit": 1000,
"classes": [],
"indexes": []
}
}
}
文件中的内容比必要的多,我用它作为很多东西的模板。在这种情况下,我不必在ETL文件中创建索引,因为我已经在createVertexGeoGlyph.osql
文件中创建了它。
要加载数据,我只需使用oetl.sh
脚本:
$ oetl.sh commonGeoGlyph.json nazca_lines.json
这对我有用......我确信有更好的方法可以做到,但这很有效。我在这里张贴这个以解决问题。希望有人会觉得这很有用。