Logstash / Elasticsearch JDBC document_id vs document_type?

Итак, я пытаюсь обернуть голову вокруг document_type vs document_id при использовании импортера JDBC из logstash и экспорте в elasticsearch.

Я наконец обернулся вокруг указателей. Но давайте представим, что я извлекаю из таблицы данные датчика (например, температура / влажность / и т. Д.), В которой есть идентификаторы датчика ... температура / влажность (данные, связанные с погодой) с записью времени. (Значит, это большой стол)

И я хочу продолжать опрашивать базу данных каждые X так часто.

Что будет в этом экземпляре document_type vs document_id, это будет сохранено (или как вы хотите его назвать) по 1 индексу.

Document_type vs document_id меня смущает, особенно в отношении импортера JDBC.

Если я установлю document_id, чтобы указать мой первичный ключ, не будет ли он каждый раз перезаписываться? Значит, у меня будет только 1 документ данных каждый раз? (что кажется бессмысленным)


person msmith1114    schedule 28.03.2017    source источник


Ответы (1)


Плагин 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
comment
Вау, спасибо, это, наверное, лучшее объяснение, которое я видел на этих двоих! - person msmith1114; 30.03.2017
comment
Извините, это, вероятно, запоздалый вопрос: но нужно ли мне устанавливать сопоставления? Думаю, я не уверен, в чем они нуждаются? Если мне не нужно устанавливать сопоставления, действительно ли нужен тип? - person msmith1114; 11.04.2017