elasticsearchでデータ型を修正するメモ
概要
elasticsearchに入れたデータの型を修正する手順をメモ。
バージョン情報など
elasticsearch-6.0.0-alpha2
kibana-6.0.0-alpha2
前提
・elasticsearchにデータを入れてみたけど、やっぱりデータ型が違っていた。
・データ量がそれほど大きくない
reindexAPIを使った方がスマートな場合も多々ありますが、
今回はKibanaのConsoleからmappingを修正して、Logstashなどでデータを再投入する場合を想定します。
想定するシチュエーション
ユーザーのアカウント情報を示すaccountというindexにデータを突っ込んでみました。
kibanaで可視化するためにindex patternを作成...
確認してみるとageがstringになっています。
平均年齢とかをグラフ化する時とかに困ります。
ageが数字として扱われるようにmappingを修正してみます。
手順
1. 現在のmapping情報を取得する。
GET index名 をKIbanaのConsoleから実行することで、indexの情報を取得できます。
画像を見るとageのフィールドがtext型として定義されていることがわかりますね。
2. mappingの内容をコピーする。
先ほど右画面に出力されたjsonを畳むと、aliases, mappings, settingsなどの項目があるのがわかりますが、
今回はmappingの部分のみをコピーします。
こんな感じでコピーします。
3. mappingを変更する。
今度はConsoleの左画面を使います。
PUT index名 でindexを作成でき、その際にmappingを定義することができます。
これだとindexが作られるだけ。
中にmappingの定義を記述することで、データ型の定義などができます。
先ほどコピーしたmappingの内容を波括弧の中に貼り付けます。
そして、該当箇所のデータ型を書き換えます。
今回はageをintegerに書き換えています。
4. 変更したmappingを適用する。
さて、mapping定義を書き換えたので、実行してみます。
....怒られましたね。
indexが既に存在している場合、PUT index名によってmapping定義を上書きすることはできません。
なので、「indexの削除」→「mappingの定義」→「データの再投入」という手順を踏みます。
(ダウンタイムを極力減らしたい場合は、別名のindexにデータを新しく入れて、aliasを切り替えるという手もありですね。)
indexをDELETEして...
再実行
こんどは上手く行きました☺️
5. データを再投入して型を確認する
データ型の修正もしたところで、データをもう一度入れて、型を確認してみましょう。
index patternsの画面で一度refreshを押して
ageのところを見ると....
しっかりnumberとして認識されていました。
めでたしめでたし。
まとめ
- データ型を修正したい時は、現在のmapping情報をコピーして必要箇所を変更して貼り付けると楽ちん
- もちろんコピーしないで、必要なフィールドの型を定義してもOK(でもコピペなら文法覚えなくてもできる)
- reindexAPIを使ったりする方法もある
- kibanaから参照する場合は、index patternのrefreshをお忘れなく