Help us understand the problem. What is going on with this article?

MongoDBとmetabaseでjsonファイルを見やすくしたい 前編

More than 1 year has passed since last update.

この記事はニフティグループ Advent Calendar 2018 2日目の記事です。
1日目は@winterwindさんのS3 に画像が保存されたら自動でAmazon Rekognitionの画像分析を実行する でした。



手元にゲームの戦績データが入ったjsonがあるのですが、結構複雑で1個1個のデータが大きくてふつうにパースするのもちょっと面倒な感じです。
本稿は、そんな感じのjsonをいい感じに可視化してみようと試みた記事です。

やったこととしては

  • MongoDBにJSONデータを突っ込む
  • metabase(https://www.metabase.com/) とMongoDBを連携する
  • というのをDocker上で完結させる

といったかんじです。結構簡単にできます。

立ち上げるまで

  1. docker hubからMongoDBのimageをpullする
$ docker pull mongo

2.metabaseのimageもpullする

$ docker pull metabase/metabase

3.docker-compose.ymlを記述する

docker-compose.yml
version: "2"
services:
  metabase:
    container_name: "metabase"
    image: metabase/metabase
    ports:
      - "3000:3000"
  db:
    container_name: "mongo"
    image: mongo
    ports:
      - "27017:27017"
    volumes:
      - ./:/tmp

mongoのvolumesは、ホスト側には自分がmongoにつっこみたいjsonファイルのあるディレクトリを指定して、
コンテナ側にはとりあえずtmpを指定しました。
IPASSはローカルなのでとりあえず無し。

4.コンテナを立ち上げる

$ docker-compose up

これで環境が整いました。とても簡単。Dockerってすばらしいですね・・・・・・。
これでバックグラウンドでMongoDBのコンテナが起動した状態になります。

コンテナの中に入る

$ docker exec -it mongo /bin/bash
# cd tmp
# ls
hoge.json

コンテナ起動時に指定したディレクトリに移動してlsするとローカル側のファイルがあることが確認できるはずです。

jsonファイルをつっこむ

mongoimportコマンドでjsonファイルをimportすることが可能です。

mongoimport --db db_name --collection collection_name --type json --file hoge.json 

db_nameとcollection_nameは任意の好きな名前をつけます。
collectionというのはMySQLなどで言うところのテーブルです。
とくにDB・テーブルを作成するという操作が無くてもinsertできました。

中身を確認する

mongo と入力することでmongoのコマンドラインが起動します。

# mongo
MongoDB shell version v4.0.4
connecting to: mongodb://127.0.0.1:27017
後略
---

> use db_name
switched to db db_name
> db.collection_name.find()
# 結果が出る

metabaseの設定をする

名前やメールアドレスなどは任意のものを入力します。DB追加の部分は以下のように設定。

  • 名前
    • dashbordで見つけやすい名前
  • ホスト
    • MongoDBのコンテナの名前。上記のymlだと"mongo"にしています。
  • ポート 
    • ymlに記述した値。上記だと27017
  • データベース名
    • JSONをinsertしたときにつけたDBの名前を設定。

おそらくこれでmetabase側でDBの情報が適当にグラフ化されたりするはず。
スクリーンショット 2018-12-02 21.56.07.png

クエリを書かなくても簡単なグラフ作ってくれるのはかなり便利ですね。
こんな感じでわりとシンプルな手順で複雑なjsonがいじりやすく、可視化しやすい状態になりました。

後編につづきます。

参考文献

https://open-groove.net/mongodb/mongodb-shell-eval/
https://qiita.com/saba1024/items/f2ad56f2a3ba7aaf8521

3日目は@machinanetteさんの「サンタのおもちゃをmicro:bitで制御する」です!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away