[DOCKER] Introduction à la métabase ~ Construction de l'environnement ~

introduction

Ces dernières années, je pense que la visualisation et la démocratisation des données à l'aide d'outils de BI sont devenues extrêmement importantes. J'ai utilisé des outils BI tels que Redash, mais Je n'ai pas abordé Metabase, qui est un sujet brûlant depuis un certain temps, alors je vais essayer d'y toucher une fois. Pour DB, j'utilise MySQL8.

À propos de l'environnement

Construisez avec Docker. Nous avons préparé le fichier docker-compose.yml suivant.

docker-compose.yml



version: '3'
services:
  app:
    image: metabase/metabase:v0.37.0.2
    container_name: metabase
    ports:
      - 3000:3000
    volumes:
      - ./metabase/data:/mnt/data

  sample_db:
    build: ./db
    container_name: sample_db
    ports:
      - 33006:3306
    volumes:
      - mysql-sample-app-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: sample
      MYSQL_APP_USER: sample
      MYSQL_APP_USER_PASSWORD: sample
      MYSQL_DATABASE: metabase_sample
    restart: unless-stopped

volumes:
  mysql-sample-app-data:
    driver: local

En ce qui concerne la hiérarchie des répertoires, j'ai téléchargé le projet sur GitHub, donc Veuillez vérifier ici. https://github.com/inagacky/metabase_sample

Lancer en fait

Démarrez avec la commande suivante.

[inagacky@macbook] ~/workspace/metabase_sample
% docker-compose up -d

Après cela, accédez à http: // localhost: 3000 et si l'écran suivant apparaît, cela réussit. スクリーンショット 2020-10-29 9.47.05.png

Réglage initial

Suivez le guide «Langue», «Paramètres utilisateur» et «Paramètres de source de données». C'est très poli, donc vous n'avez pas à vous inquiéter. スクリーンショット 2020-10-29 9.49.31.png

Une fois les réglages terminés, l'écran ci-dessous apparaît. Au départ, il existe un "Sample Dataset", mais cette fois, nous le vérifierons avec notre propre base de données. スクリーンショット 2020-10-29 9.52.42.png

Paramètres de base de données

Créez une table et versez les données dans la base de données qui s'exécute sur Docker. Puisque nous sommes dans le secteur de l'immobilier, nous faisons un tableau simple avec une structure comme celle-là. Cette fois, nous créerons des «informations client», des «informations sur la propriété» et des «informations sur le contrat». (Il y a certains domaines qui devraient être maîtrisés, mais c'était gênant, alors je l'ai fait tel quel.)

CREATE TABLE IF NOT EXISTS `customers` (      --Informations client
  `id` INT AUTO_INCREMENT,                    -- PK
  `name` VARCHAR(20) ,                        --Nom complet
  `age` INT,                                  --âge
  PRIMARY KEY (`id`),
  KEY `idx_age`(`age`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
;
CREATE TABLE IF NOT EXISTS `property` (    --Informations sur la propriété
  `id` INT AUTO_INCREMENT,                 -- PK
  `prefName` VARCHAR(20) ,                 --Nom des préfectures
  `price` BIGINT,                          --prix
  `category` VARCHAR(20),                  --Catégorie(Maison individuelle/terre/Manoir etc.)
  PRIMARY KEY (`id`),
  KEY `idx_prefName`(`prefName`),
  KEY `idx_price`(`price`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
;
CREATE TABLE IF NOT EXISTS `contracts` (  --Informations contractuelles
  `customer_id` INT NOT NULL,             --N ° de client
  `property_id` INT NOT NULL,             --ID de propriété
  CONSTRAINT fk_customer_id
    FOREIGN KEY (customer_id) 
    REFERENCES customers (id)
    ON DELETE RESTRICT,
  CONSTRAINT fk_property_id
    FOREIGN KEY (property_id) 
    REFERENCES property (id)
    ON DELETE RESTRICT
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
;

Pour les données, procédez comme suit.

--Informations client
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('Ichiro Yamada', '30');
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('Jiro Yamada', '31');
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('Ichiro Tanaka', '32');
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('Jiro Tanaka', '45');
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('Saburo Tanaka', '50');
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('Ichiro Suzuki', '47');
INSERT INTO `metabase_sample`.`customers` (`name`, `age`) VALUES ('Jiro Suzuki', '20');

--Informations sur la propriété
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('Préfecture d'Aichi', '32000000', 'Maison individuelle');
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('Préfecture d'Aichi', '40000000', 'Maison individuelle');
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('Tokyo', '90000000', 'Maison individuelle');
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('Tokyo', '120000000', 'appartement');
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('Préfecture d'Aichi', '20000000', 'terre');
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('Tokyo', '90000000', 'appartement');
INSERT INTO `metabase_sample`.`property` (`prefName`, `price`, `category`) VALUES ('Préfecture d'Aichi', '24000000', 'appartement');

--Informations contractuelles
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('1', '1');
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('2', '2');
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('3', '3');
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('4', '4');
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('5', '5');
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('6', '6');
INSERT INTO `metabase_sample`.`contracts` (`customer_id`, `property_id`) VALUES ('7', '7');

Jouez avec la métabase

L'introduction est devenue longue, mais je vais jouer un peu avec la métabase.

Jointure de table

Les jointures de table peuvent également être effectuées sur l'interface graphique. スクリーンショット 2020-10-29 11.12.30.png

Vous pouvez parcourir le tableau comme indiqué ci-dessous. スクリーンショット 2020-10-29 11.13.15.png

Graphique

Il existe également différents types de graphiques. (Cela n'avait pas l'air bien car il n'y avait pas beaucoup de données ...) スクリーンショット 2020-10-29 11.18.37.png

Tableau de bord

Vous pouvez également créer un tableau de bord comme indiqué ci-dessous. スクリーンショット 2020-10-29 11.24.36.png

Sommaire

J'ai touché à la métabase pour la première fois, mais j'ai compris diverses choses de manière intuitive. Étant donné que l'article est devenu plus long que prévu en raison de la construction de l'environnement, etc., concernant chaque fonction de la métabase J'aborderai la création de graphes avec divers indicateurs dans un autre article. .. (Veuillez noter qu'il s'agit d'une édition de construction environnementale ...)

C'est tout merci.

Recommended Posts

Introduction à la métabase ~ Construction de l'environnement ~
Introduction à la bataille de robots avec Robocode (construction d'environnement)
Ingénieur en route vers Java Partie 1 Introduction et construction de l'environnement
Introduction à kotlin pour les développeurs iOS ①-Construction de l'environnement
Introduction au développement de modules Slay the Spire (2) Construction de l'environnement de développement
Introduction à Ruby 2
[Java] Construction de l'environnement
Jekyll Super Introduction # 1 à partir de 0 - Construction de l'environnement
Introduction à web3j
Introduction à Micronaut 1 ~ Introduction ~
[Java] Introduction à Java
Introduction à la migration
Introduction à Java
[Printemps] Construction de l'environnement
Introduction à Doma
Comment lier Rails6 Vue (à partir de la construction de l'environnement)
Construction de l'environnement Penronse [Windows]
Introduction aux fichiers JAR
Introduction à Ratpack (8) - Session
[Flutter] Construction de l'environnement Ubuntu 20.04
Construction de l'environnement Rails Docker
Introduction à l'arithmétique des bits
Introduction à Ratpack (6) - Promesse
Introduction à Ratpack (9) --Thymeleaf
Introduction à PlayFramework 2.7 ① Présentation
Introduction à la mise en page Android
Introduction aux modèles de conception (introduction)
Introduction à la programmation pratique
Introduction à la commande javadoc
Introduction à la commande jar
Introduction à Ratpack (2) -Architecture
construction d'environnement de développement Java
Introduction au style lambda
Introduction à la commande java
Introduction au développement de Keycloak
Introduction à la commande javac
Déployer sur Ruby on Rails Elastic beanstalk (Construction de l'environnement)
Introduction aux modèles de conception (Builder)
Construction de l'environnement de développement Rails6 [Mac]
Ingénieur Rails Environnement Construction Ruby2.7.1
J'ai essayé node-jt400 (Construction de l'environnement)
Construction de l'environnement des rails Rails5.2.1 ruby2.5.1 Catalina
Introduction au développement d'applications Android
Introduction à Ratpack (5) --Json & Registry
Mémo de construction de l'environnement MySQL 5.7 (Docker)
Introduction à Ratpack (7) --Guice & Spring
(Installation par points) Introduction à Java8_Impression
Introduction aux modèles de conception (composite)
Introduction à Micronaut 2 ~ Test unitaire ~