2016-08-29 2 views
1

WGS84 Lat/Long의 공간 좌표가 포함 된 일부 CSV 파일에서 OrientDB로 일부 데이터를로드하는 데 관심이 있습니다.ETL을 사용하여 SPATIAL 인덱스가 포함 된 OrientDB에 CSV 데이터를로드합니다.

저는 OrientDB 2.2.8을 사용 중이며 lucene spatial module을 $ 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을 통해 공간 색인을 만드는 사람이 있습니까? 내가보고있는 대부분의 것들은 자바 또는 direct query을 사용하고 있습니다.

    미리 조언 해 주셔서 감사합니다.

  • +0

    안녕하십니까? 전체 코드를 게시 할 수 있습니까? –

    +0

    "SPATIAL", "algorithm": "LUCENE"알고리즘을 지정해야한다고 생각하지만 동일한 예외가 발생합니다. github에서 문제를 열 ​​수 있습니까? –

    답변

    0

    legacy spatial capabilities을 사용하여로드 할 수있었습니다.

    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 :

    나는 함께 나스카 라인 지상 그림의 일부에 대한 몇 가지 좌표가있는 cheezy 데이터 세트 넣어

    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 파일을 만드는 것입니다. 필자는 두 가지를 만들고 싶습니다. 하나는 파일 고유의 파일이고 다른 하나는 여러 파일에 걸쳐있는 데이터 세트가있는 공통 파일입니다.

    { 
        "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 파일을 작성했기 때문에 색인을 ETL 파일에 작성하지 않아도됩니다.

    $ oetl.sh commonGeoGlyph.json nazca_lines.json 
    

    이 내가 그것을 할 수있는 더 나은 방법이 확신하지만,이 작품 ... 나를 위해 일하고있어 무엇 :

    내가 그냥 oetl.sh 스크립트를 사용하여 데이터를로드합니다. 나는이 질문을 묶기 위해 여기에 올리고있다. 바라건대 누군가가 이것을 유용하다고 생각하기를 바랍니다.

    관련 문제