2016-08-17 2 views
0

Я пытаюсь получить простой пример загрузки с помощью загрузчика ETL, но я должен что-то упустить. Я следил за различными потоками в Stack Overflow и шел по documentation on extractors, но я не согласен с моей попыткой.OrientDB 2.2.7 ETL для CSV не загружается поле DateTime?

Вот мои данные: vertices.csv

label,data,Date 
v01,0.1234,2015-01-01 02:30 
v02,0.5678,2015-02-20 15:32 
v03,0.9012,2015-03-30 11:00 

Я устанавливаю два JSON файлов, чтобы попытаться загрузить его в базу данных PLOCAL:

vertices.json

{ 
    "config": { 
     "log": "debug", 
     "fileDirectory": "./", 
     "fileName": "vertices.csv" 
    } 
} 

и commonVertices.json

{ 
    "begin": [ { "let": { "name": "$filePath", "expression": "$fileDirectory.append($fileName)" } } ], 
    "config": { "log": "info" }, 
    "source": { "file": { "path": "$filePath" } }, 
    "extractor": { "csv": { "ignoreEmptyLines": true, 
          "nullValue": "N/A", 
          "columnsOnFirstLine": true, 
          "dateFormat": "yyyy-mm-dd HH:MM", 
          "columns": ["label:string","weight:float","Date:datetime"] 
          } 
       }, 
    "transformers": [ 
      { "vertex": { "class": "myVertex" } }, 
      { "code": { "language": "Javascript", "code": "print(' Current record: ' + record); record;" } } 
     ], 
    "loader": { 
     "orientdb": { 
      "dbURL": "plocal:test.orientdb", 
      "dbType": "graph", 
      "batchCommit": 1000, 
      "classes": [ { "name": "myVertex", "extends", "V" } ], 
      "indexes": [ { "class": "myVertex", "fields":["label:string","Date:datetime"], "type":"NOTUNIQUE" } ] 
     } 
    } 
} 

я загружаю его с помощью oetl.sh с помощью команды:

$ oetl.sh commonVertices.json vertices.json 

Вывод, с отладочной информацией, здесь:

> oetl.sh commonVertices.json vertices.json 
OrientDB etl v.2.2.7 (build [email protected]; 2016-08-11 15:17:33+0000) www.orientdb.com 
[csv] INFO column types: {weight=FLOAT, Date=DATETIME, label=STRING} 
BEGIN ETL PROCESSOR 
[file] INFO Reading from file ./vertices.csv with encoding UTF-8 
Started execution with 1 worker threads 
[orientdb] DEBUG orientdb: found 9 vertices in class 'null' 
[orientdb] DEBUG orientdb: found metadata field 'null' 
Start extracting 
[csv] DEBUG document={weight:0.1234,Date:null,label:v01} 
[csv] DEBUG document={weight:0.5678,Date:null,label:v02} 
[1:vertex] DEBUG Transformer input: {weight:0.1234,Date:null,label:v01} 
[csv] DEBUG document={weight:0.9012,Date:null,label:v03} 
[1:vertex] DEBUG Transformer output: v(myVertex)[#25:3] 
[1:code] DEBUG Transformer input: v(myVertex)[#25:3] 
    Current record: myVertex#25:3{weight:0.1234,Date:null,label:v01} v1 
[1:code] DEBUG executed code=OCommandExecutorScript [text=print(' Current record: ' + record); record;], result=myVertex#25:3{weight:0.1234,Date:null,label:v01} v1 
[1:code] DEBUG Transformer output: myVertex#25:3{weight:0.1234,Date:null,label:v01} v1 
[2:vertex] DEBUG Transformer input: {weight:0.5678,Date:null,label:v02} 
[2:vertex] DEBUG Transformer output: v(myVertex)[#26:3] 
[2:code] DEBUG Transformer input: v(myVertex)[#26:3] 
    Current record: myVertex#26:3{weight:0.5678,Date:null,label:v02} v1 
[2:code] DEBUG executed code=OCommandExecutorScript [text=print(' Current record: ' + record); record;], result=myVertex#26:3{weight:0.5678,Date:null,label:v02} v1 
[2:code] DEBUG Transformer output: myVertex#26:3{weight:0.5678,Date:null,label:v02} v1 
[3:vertex] DEBUG Transformer input: {weight:0.9012,Date:null,label:v03} 
[3:vertex] DEBUG Transformer output: v(myVertex)[#27:3] 
[3:code] DEBUG Transformer input: v(myVertex)[#27:3] 
    Current record: myVertex#27:3{weight:0.9012,Date:null,label:v03} v1 
[3:code] DEBUG executed code=OCommandExecutorScript [text=print(' Current record: ' + record); record;], result=myVertex#27:3{weight:0.9012,Date:null,label:v03} v1 
[3:code] DEBUG Transformer output: myVertex#27:3{weight:0.9012,Date:null,label:v03} v1 
[orientdb] INFO committing 
Pipeline worker done without errors:: true 
all items extracted 
END ETL PROCESSOR 
+ extracted 3 rows (0 rows/sec) - 3 rows -> loaded 3 vertices (0 vertices/sec) Total time: 149ms [0 warnings, 0 errors] 

Он загружает .. . , но поля даты не заполняются никакими данными, как показано по этому запросу:

orientdb {db=test.orientdb}> SELECT FROM myVertex 

+----+-----+--------+------+----+-----+ 
|# |@RID |@CLASS |weight|Date|label| 
+----+-----+--------+------+----+-----+ 
|0 |#25:0|myVertex|0.1234| |v01 | 
|1 |#26:0|myVertex|0.5678| |v02 | 
|2 |#27:0|myVertex|0.9012| |v03 | 
+----+-----+--------+------+----+-----+ 

3 item(s) found. Query executed in 0.003 sec(s). 

До сих пор, по-видимому, ETL будет импортировать даты, если вы оставите поля «dateFormat» и «columns» из файла commonVertices.json, но при этом он может импортировать DATE но он не будет импортировать время.

Я немного застрял в этом, это похоже на ошибку, но я новичок в OrientDB, поэтому надеюсь, что пользовательская ошибка имеет простое решение.

Как всегда, любая помощь очень ценится!

+0

Обратите внимание на строку формата '' dateFormat: "yyyy-mm-dd HH: MM" ', правый формат должен быть:' "dateFormat": "yyyy-MM-dd HH: mm" '. Взгляните на [javadoc] (https://docs.oracle.com/javase/8/docs/api/index.html?java/time/package-summary.html) –

+0

Просто добавив полезную ссылку на другой вопрос: [http://stackoverflow.com/a/11046198/2059999](http://stackoverflow.com/a/11046198/2059999) – TxAG98

ответ

1

Я попытался с

"extractor": { "csv": { "ignoreEmptyLines": true, 
          "nullValue": "N/A", 
          "columnsOnFirstLine": true, 
          "dateFormat": "yyyy-MM-dd hh:mm" 
          } 
       }, 

и работал

enter image description here

Надеется, что это помогает.

+0

Спасибо! Изменение форматирования действительно сработало ... Тем не менее, [документация по экстракторам] (http://orientdb.com/docs/2.2.x/Extractor.html) кажется неправильной, так как в их примере показано поле dateFormat из «dd -mm-yyyy HH: MM ". Интересно, что изменение формата даты из моего примера не помогло. Мне пришлось ** удалить ** столбцы ': [" label: string "," weight: float "," Date: datetime "]' или также не работать. – TxAG98

+0

Кроме того, если я удаляю строку столбцов ** и ** использую форматирование даты, как указано в документации OrientDB («yyyy-dd-mm HH: MM»), она все равно будет загружать дату ... но даты фактически получил искалечен: v01 получает неверную дату «2017-06-01 02:01:00» вместо правильной «2015-01-01 02:30». – TxAG98

+0

Да, все, что вы сказали, верно. –

Смежные вопросы