私はESを初めて使用し、logstashjdbcを使用してMYSQLからElasticsearchにデータをロードしようとしています。
私の状況では、フィールド名として列の値を使用したいのですが、出力データのnew&hexを参照してください。フィールド名として「id」の値が必要です。
Mysqlデータ
cid id color new hex create modified
1 101 100 euro abcd #86c67c 5/5/2016 15:48 5/13/2016 14:15
1 102 100 euro 1234 #fdf8ff 5/5/2016 15:48 5/13/2016 14:15
必要な出力
{
"_index": "colors_hexa",
"_type": "colors",
"_id": "1",
"_version": 218,
"found": true,
"_source": {
"cid": 1,
"color": "100 euro",
"new" : {
"101": "abcd",
"102": "1234",
}
"hex" : {
"101": "#86c67c",
"102": "#fdf8ff",
}
"created": "2016-05-05T10:18:51.000Z",
"modified": "2016-05-13T08:45:30.000Z",
"@version": "1",
"@timestamp": "2016-05-14T01:30:00.059Z"
}
}
Logstash構成:
input {
jdbc {
jdbc_driver_library => "/etc/logstash/mysql/mysql-connector-Java-5.1.39-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test"
jdbc_user => "root"
jdbc_password => "*****"
schedule => "* * * * *"
statement => "select cid,id,color, new ,hexa_value ,created,modified from colors_hex_test order by cid"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
}
}
output {
elasticsearch {
index => "colors_hexa"
document_type => "colors"
document_id => "%{cid}"
hosts => "localhost:9200"
}
}
誰かがこのデータのフィルタータグを手伝ってくれませんか。「new」と「hex」フィールドがここでの問題です。 2つのレコードを1つのドキュメントに変換しようとしています。
あなたが探しているのは 集約フィルター 。それらの例の1つは、ここで探しているJDBCユースケース用です(例4を参照)。
JDBC入力はスケジュールされたアクションであるため、短期間に到着するすべてのイベントをマージするように集約フィルターを設定できます。言ってやるが、10秒。 JDBC入力によってプルされたすべての行は、非常に密接にグループ化されて到着し、最終的にマージされるはずです。
探しているフィールドの連結を処理するためにRubyコードを作成する必要があるため、このフィルターは他のフィルターよりも複雑です。しかし、それはできるはずです。