Плагин jdbc создаст документ JSON. с одним полем для каждого столбца. Итак, чтобы соответствовать вашему примеру, если бы у вас были эти данные, они были бы импортированы как документ, который выглядит следующим образом:
{
"sensor_id": 567,
"temp": 90,
"humidity": 6,
"timestamp": "{time}",
"@timestamp": "{time}" // auto-created field, the time Logstash received the document
}
Вы были правы, когда сказали, что если вы установите document_id
на свой первичный ключ, он будет перезаписан. Вы можете игнорировать document_id
, если не хотите обновлять существующие документы в Elasticsearch, что я не думаю, что вам захочется делать с этим типом данных. Позвольте Elasticsearch сгенерировать для вас идентификатор документа.
Теперь поговорим о document_type
. Если вы хотите установить тип документа, вам необходимо установить в поле type
в Logstash какое-то значение (которое будет передано в Elasticsearch). Таким образом, поле типа в Elasticsearch используется для группировки аналогичные документы. Если все документы в вашей таблице, которые вы импортируете с помощью плагина jdbc, имеют один и тот же тип (они должны быть!), Вы можете установить type
во входных данных jdbc следующим образом ...
input {
jdbc {
jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
jdbc_user => "mysql"
parameters => { "favorite_artist" => "Beethoven" }
schedule => "* * * * *"
statement => "SELECT * from songs where artist = :favorite_artist"
...
type => "weather"
}
}
Теперь в Elasticsearch вы можете воспользоваться полем type
, установив отображение для этого типа. Например, вы можете захотеть:
PUT my_index
{
"mappings": {
"weather": {
"_all": { "enabled": false },
"properties": {
"sensor_id": { "type": "integer" },
"temp": { "type": "integer" },
"humidity": { "type": "integer" },
"timestamp": { "type": "date" }
}
}
}
}
Надеюсь это поможет! :)
person
fylie
schedule
29.03.2017