OrientDB ETL с файлом данных JSON

Я не вижу хорошей документации о том, как использовать функцию OrientDB ETL для загрузки файла JSON данных.

Я запускаю эту команду: ./oetl.sh ../template_etl.json
Содержимое template_etl.json выглядит так:

{
    "config": {
        "log": "debug"
    },
    "begin": [
    ],
    "source" : {
        "file": {"path": "../repos.json", "lock" : true }
    },
    "extractor" : {
        "row": {}
    },
    "transformers" : [
        {"json"},
        { "vertex": { "class": "V" } }
    ],
    "loader" : {
        "orientdb": {
            "dbURL": "plocal../databases/template",
            "dbUser": "admin",
            "dbPassword": "admin",
            "dbAutoCreate": true,
            "tx": false,
            "batchCommit": 1000,
            "dbType": "graph"
        }
    }
}

Я взял этот пример из примера csv из https://www.udemy.com/orientdb-getting-started/#/lecture/1998370, где эта строка: {"json"} изначально была: {"csv": {"separator": ",", "multiValue": "NULL "," skipFrom ": 1," skipTo ": 1}},

Я получаю следующую ошибку: orientdb-community-2.0 / bin $ ./oetl.sh ../template_etl.json

OrientDB etl v.2.0 (build @BUILD@) www.orientechnologies.com
Exception in thread "main" com.orientechnologies.orient.core.exception.OSerializationException: Error on unmarshalling JSON content for record: "config": {
        "log": "debug"
    },
    "begin": [
    ],
    "source" : {
        "file": {"path": "../repos.json", "lock" : true }
    },
    "extractor" : {
        "row": {}
    },
    "transformers" : [
        {"json"},
        { "vertex": { "class": "V" } }
    ],
    "loader" : {
        "orientdb": {
            "dbURL": "plocal../databases/template",
            "dbUser": "admin",
            "dbPassword": "admin",
            "dbAutoCreate": true,
            "tx": false,
            "batchCommit": 1000,
            "dbType": "graph"
        }
    }

    at   com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerJSON.fromString(ORecordSerializerJSON.java:304)
        at com.orientechnologies.orient.core.record.ORecordAbstract.fromJSON(ORecordAbstract.java:165)
        at com.orientechnologies.orient.core.record.impl.ODocument.fromJSON(ODocument.java:1712)
        at com.orientechnologies.orient.etl.OETLProcessor.main(OETLProcessor.java:147)
    Caused by: com.orientechnologies.orient.core.exception.OSerializationException: Error on unmarshalling JSON content: wrong format ""json"". Use <field> : <value>
        at com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerJSON.fromString(ORecordSerializerJSON.java:181)
        at com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerJSON.getValueAsRecord(ORecordSerializerJSON.java:595)
        at com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerJSON.getValueAsObjectOrMap(ORecordSerializerJSON.java:565)
        at com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerJSON.getValue(ORecordSerializerJSON.java:413)
        at com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerJSON.parseCollection(ORecordSerializerJSON.java:677)
        at com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerJSON.getValueAsEmbeddedCollection(ORecordSerializerJSON.java:659)
        at com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerJSON.getValueAsCollection(ORecordSerializerJSON.java:638)
        at com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerJSON.getValue(ORecordSerializerJSON.java:415)
        at com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerJSON.fromString(ORecordSerializerJSON.java:249)
        ... 3 more

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

Спасибо


person Kevin Hale    schedule 27.01.2015    source источник


Ответы (2)


JSON недействителен. Попробуйте проверить с помощью www.jsonlint.com. Попробуйте заменить:

{"json"},

С участием:

{"json": {} },
person Lvca    schedule 27.01.2015
comment
Спасибо Lvca. Этот валидатор json - отличный инструмент. Через валидатор выдает ошибку. Говорит, что ожидает строку. Так что я все еще проверяю свой json. - person Kevin Hale; 28.01.2015
comment
Итак, теперь у вас есть действующий json, благодаря вашей помощи, Lvca. Теперь я говорю, что механизм базы данных не указан, но я использую plocal. Исключение в основном потоке Ошибка при создании процессора ETL Причина: com.orientechnologies.orient.core.exception.OConfigurationException: ошибка в URL-адресе базы данных: механизм не указан. Синтаксис: ‹engine›: ‹db-type›: ‹db-name› [? ‹Db-param› = ‹db-value› [&]] *. URL был: plocal ../ databases / template - person Kevin Hale; 28.01.2015
comment
после plocal следует использовать: - person Lvca; 28.01.2015
comment
Ааа, когда я прочитал исходный пример, я предположил, что это применимо только к Windows, поскольку пример был C :. Спасибо. Это сработало. Он создал базу данных и начал обработку файла данных json. Я иду дальше по пути, но у меня есть исключение. Процесс ETL остановлен ... Обнаружено недопустимое имя класса. В названии класса нельзя использовать символ ':'. У меня не было проблем с загрузкой этого файла данных json в Mongo, поэтому я предполагаю, что он действителен. Он слишком велик для загрузки в валидатор json. Я ценю вашу помощь до сих пор. Если у вас есть идеи, я был бы признателен. - person Kevin Hale; 28.01.2015
comment
Исключение: Найдено недопустимое имя класса. Символ ':', поэтому я предполагаю, что он пытается создать класс с: в имени. Не могли бы вы поделиться фрагментом json с этой ошибкой? - person Lvca; 28.01.2015
comment
{config: {log: debug}, begin: [], source: {file: {path: ../prod_repo.json, lock: true}}, extractor: {row: {}}, transformers: [{json: {}}, {вершина: {класс: V}}], загрузчик: {orientdb: {dbURL: plocal: ../ databases / rmtemplate, dbUser: admin, dbPassword: admin, dbAutoCreate: true, tx: false, batchCommit: 1000, dbType: graph}}} - person Kevin Hale; 28.01.2015
comment
Не могли бы вы опубликовать свой входной JSON, который дает эту ошибку? Если он большой, используйте Gist. - person Lvca; 28.01.2015
comment
Я взял меньшее подмножество этого большого файла данных JSON и запустил его через валидатор json, и он вернулся как действительный. Затем я запустил команду ETL и все еще получаю эту ошибку двоеточия. Я отредактировал данные в следующем файле json. Структура такая же. Итак, вот etl.json, а затем я дам вам файл данных json. Оба возвращаются как действительные через валидатор json. - person Kevin Hale; 28.01.2015
comment
{config: {log: debug}, begin: [], source: {file: {path: ../nfl.json, lock: true}}, extractor: {row: {}}, transformers: [{json: {}}, {вершина: {класс: V}}], загрузчик: {orientdb: {dbURL: plocal: ../ databases / nfl, dbUser: admin, dbPassword: admin, dbAutoCreate: true, tx: false, batchCommit: 1000, dbType: graph}}} - person Kevin Hale; 28.01.2015
comment
{AFC: [{команда: Pittsburgh Steelers, дивизион: [afc, North], рекорд: [11-5, 4-2]}], NFC: [{команда: Green Bay Packers, подразделение: [nfc, North], запись: [12-4, 5-1]}], NFL: NORTH} - person Kevin Hale; 28.01.2015
comment
Попробуйте не использовать класс в преобразователе вершин: {vertex: {}} - person Lvca; 28.01.2015
comment
По-прежнему получаю исключение. Просмотр документации. OrientDB etl v.2.0 (build @ BUILD @) www.orientechnologies.com НАЧАТЬ ПРОЦЕССОР ETL [файл] DEBUG Чтение из файла ../nfl.json [0: json] DEBUG Transformer input: {[0: json] DEBUG Transformer output : {[0: вершина] DEBUG Вход трансформатора: {[0: вершина] DEBUG Выход преобразователя: v ({) [# 11: 0] [1: json] Вход преобразователя DEBUG: AFC: [Ошибка при выполнении конвейера: com. orientechnologies.orient.core.exception.OSchemaException: обнаружено недопустимое имя класса. В названии класса нельзя использовать символ ':'. - person Kevin Hale; 28.01.2015
comment
Не могли бы вы прислать мне фрагмент входного файла и JSON cfg для локального воспроизведения? - person Lvca; 29.01.2015
comment
{config: {log: debug}, begin: [], source: {file: {path: ../nfl_divs.json, lock: true}}, extractor: {row: {}}, transformers: [{json: {}}, {вершина: {}}], загрузчик: {orientdb: {dbURL: plocal: ../ databases / nfl, dbUser: admin, dbPassword: admin, dbAutoCreate: true, tx: false, batchCommit: 1000, dbType : graph}}} - person Kevin Hale; 29.01.2015
comment
{AFC: [{команда: Pittsburgh Steelers, дивизион: [afc, North], рекорд: [11-5, 4-2]}], NFC: [{команда: Green Bay Packers, подразделение: [nfc, North], запись: [12-4, 5-1]}], NFL: NORTH} - person Kevin Hale; 29.01.2015
comment
Я также упростил это: {AFC: Север, AFC: Юг, AFC: Восток, AFC: Запад, NFC: Север, NFC: Юг, NFC: Восток, NFC: Запад} - person Kevin Hale; 29.01.2015
comment
Следуя OrientDB-Manual.pdf, стр. 1027, я изменил экстрактор с row: {} на json: {}, и теперь я получаю другую ошибку. Медленный прогресс. ... OExtractorException: ошибка [экстрактора JSON] при извлечении json .... SerializationException: ошибка при демаршалинге содержимого JSON для записи: AFC: ... - person Kevin Hale; 06.02.2015
comment
Попытайтесь охватить входной файл json с помощью []. - person Lvca; 15.02.2015

Я не такой эксперт, как Lvca, но ваш исходный файл имеет расширение json. Это означает, что ваш экстрактор должен быть заменен на ("json": {}) и нет трансформаторов "json".

"extractor" : {
    "json": {}
},
"transformers" : [
    { "vertex": { "class": "V" } }
],

http://orientdb.com/docs/last/Transformer.html

person Rick    schedule 27.08.2015