2016-08-29 5 views
1

WGS84 Lat/Longの空間座標を含むCSVファイルからOrientDBにデータをロードすることに興味があります。ETLを使用してCSVデータをSPATIALインデックスを含むOrientDBにロードする

OrientDB 2.2.8を使用していて、$ ORIENTDB_HOME/libディレクトリにlucene spatial moduleが追加されています。

私は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かdirect queryを使っています。

アドバイスを事前にいただきありがとうございます。

+0

こんにちは、コード全体を投稿できますか? –

+0

私はあなたも "タイプ"アルゴリズムを指定する必要があると思います: "SPATIAL"、 "アルゴリズム": "LUCENE"、しかし、私は同じ例外を取得します。 githubで問題を開くことはできますか? –

答えて

0

legacy spatial capabilitiesを使用して読み込むことができました。私はcreateVertexGeoGlyph.osql、私GeoGlyphクラスを作成するためのスクリプトを使用

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 

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 

私は一緒にナスカラインの地上絵のいくつかのためのいくつかの座標を持っているcheezyデータセットを置きます

$ console.sh createVertexGeoGlyph.osql 

私は自分のデータベースにロードしますもっと一貫して私のために働くこと。私は、CSVインポートをオフにしたいときに、ETLエンジンで定義済みのプロパティを作成することにいくつかの問題がありました。時々、私の財産を協力して作りたいと思っています。

したがって、データを取得する次の手順は、ETLプロセス用の.jsonファイルを作成することです。私は2つのファイルを作成するのが好きです。ファイル固有のファイルと共通のファイルは、複数のファイルにまたがるデータセットを持つことが多いためです。

{ 
    "config": { 
     "log": "info", 
     "fileDirectory": "./", 
     "fileName": "nazca_lines.csv" 
    } 
} 

次はcommonGeoGlyph.jsonファイルです:

まず、私は私のnazca_liens.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": [] 
     } 
    } 
} 

必要であるよりも、ファイル内の多くのものがありますが、私はのためのテンプレートとして使用しますたくさんのもの。この場合、私はすでにcreateVertexGeoGlyph.osqlファイルに作成してあるので、ETLファイル自体にインデックスを作成する必要はありません。

$ oetl.sh commonGeoGlyph.json nazca_lines.json 

これは私がそれを行うには良い方法があると確信しているが、これは動作します...私のために働いているものです:

は、私はちょうど oetl.shスクリプトを使用してデータをロードします。私はこの質問を結びつけるためにここに掲示しています。うまくいけば、誰かがこれが役に立つと思うでしょう。

関連する問題