Не удалось вставить JSON из PostgreSQL в elasticsearch. Получение ошибки - «Исключение при выполнении запроса JDBC»

Я пытаюсь перенести данные с сервера postgresql на elasticsearch. Данные postgres находятся в формате JSONB. Когда я запускаю реку, я получаю следующую ошибку.

 [INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
 [2019-01-07T14:22:34,625][INFO ][logstash.inputs.jdbc ] (0.128981s) SELECT to_json(details) from inventory.retailer_products1 limit 1
 [2019-01-07T14:22:35,099][WARN ][logstash.inputs.jdbc ] Exception when executing JDBC query {:exception=>#<Sequel::DatabaseError: Java::OrgLogstash::MissingConverterException: Missing Converter handling for full class name=org.postgresql.util.PGobject, simple name=PGobject>}
 [2019-01-07T14:22:36,568][INFO ][logstash.pipeline ] Pipeline has terminated {:pipeline_id=>"main", :thread=>"#<Thread:0x6067806f run>"}

Я думаю, что logstash не может определить тип данных JSON.

Ниже приведен мой файл конфигурации logstash.

    input {
        jdbc {
            jdbc_connection_string => "jdbc:postgresql://localhost:5432/mydb"
            jdbc_user => "postgres"
            jdbc_password => "password"
            jdbc_validate_connection => true
            jdbc_driver_library => "/home/dell5/Downloads/postgresql-9.4.1208.jar"
            jdbc_driver_class => "org.postgresql.Driver"
            statement => "SELECT to_json(details) from inventory.retailer_products1 limit 1"
        }
    }

filter{
    json{
        source => "to_json"
    }
}

output {
    elasticsearch {
        index => "products-retailer"
        document_type => "mapping-retailer"
        hosts => "localhost"
        }
        stdout{}
    }

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

{
"products-retailer": {
    "mappings": {
        "mapping-retailer": {
            "dynamic": "false",
                "properties": {
                    "category": {
                        "type": "keyword"
                    },
                    "id": {
                        "type": "keyword"
                    },
                   "products": {
                        "type": "nested",
                        "properties": {
                                "barcode": {
                                    "type": "text"
                                },
                                "batchno": {
                                    "type": "text"
                                },
                                "desc": {
                                    "type": "text"
                                },
                                "expirydate": {
                                    "type": "date",
                                    "format": "YYYY-MM-DD"
                                },
                                "imageurl": {
                                    "type": "text"
                                },
                                "manufaturedate": {
                                    "type": "date",
                                    "format": "YYYY-MM-DD"
                                },
                                "mrp": {
                                    "type": "text"
                                },
                                "name": {
                                    "type": "text",
                                    "fields": {
                                        "ngrams": {
                                            "type": "text",
                                            "analyzer": "autocomplete"
                                        }
                                    }
                                },
                                "openingstock": {
                                    "type": "text"
                                },
                                "price": {
                                    "type": "text"
                                },
                                "purchaseprice": {
                                    "type": "text"
                                },
                                "sku": {
                                     "type": "text"
                                },
                                "unit": {
                                    "type": "text"
                                }
                            }
                        },
                        "retailerid": {
                            "type": "keyword"
                        },
                        "subcategory": {
                            "type": "keyword"
                        }
                    }
                }
            }
        }
    }

Пример данных в столбце postgres приведен ниже. Он имеет вложенный json, который я определил в сопоставлении elasticsearch.

{
    "id": "",
    "Category": "Bread and Biscuits",
    "products": {
        "MRP": "45",
        "SKU": "BREAD-1",
        "Desc": "Brown Bread",
        "Name": "Brown Bread",
        "Unit": "Packets",
        "Brand": "Britannia",
        "Price": "40",
        "BarCode": "1234567890",
        "BatchNo": "456789",
        "ImageUrl": "buscuits.jpeg",
        "ExpiryDate": "2019-06-01",
        "OpeningStock": "56789",
        "PurchasePrice": "30",
        "ManufactureDate": "2018-11-01"
    },
    "RetailerId": "1",
    "SubCategory": "Bread"
}

Пожалуйста, предложите, что мне здесь не хватает, и если это правильный способ сделать это.

Я использую Elasticsearch 6.5.1. Постгрес SQL 9.5.


person skumar    schedule 08.01.2019    source источник


Ответы (2)


PGObject не имеет возможности конвертировать json из метода to_json. используйте внутреннее литье для преобразования jsonobject в текст, подобный этому.

ВЫБЕРИТЕ to_json(details)::text from inventory.retailer_products1 limit 1.

Теперь вы можете разобрать строку json в logstash.

person Sankar Prasanth Gadhamsetti    schedule 26.08.2019

Сегодня я столкнулся с той же ошибкой, и кажется, что logstash не может преобразовать поля данных Postgres json или jsonb (PgObject).

Я преобразовал свои поля объекта в тип данных TEXT, и он перестал кричать на меня и начал принимать данные. Что касается того, правильно ли он индексирует, еще неизвестно.

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

person jamesamuir    schedule 10.01.2019