CLOVER🍀

That was when it all began.

MySQLのサンプルデータとして、Employees Sample Databaseを使う

これは、なにをしたくて書いたもの?

MySQLに入れる、ほどほどのデータがないかなぁと思って調べてみたら、MySQL自身にあるじゃないですか。

Employees Sample Database、だそうです。

MySQL :: Employees Sample Database

GitHub - datacharmer/test_db: A sample MySQL database with an integrated test suite, used to test your applications and database servers

Employees Sample Database

Employees Sample Databaseは、6つのテーブルからなる、400万レコードのデータを含むサンプルデータベースです。

MySQL :: Employees Sample Database

MySQL :: Employees Sample Database :: 2 Introduction

インストール方法は、こちら。

MySQL :: Employees Sample Database :: 3 Installation

なのですが、利用にあたっての前提条件などは、ソースコードが置いてあるGitHub側を見た方がよいでしょう。

GitHub - datacharmer/test_db: A sample MySQL database with an integrated test suite, used to test your applications and database servers

環境

今回の環境は、こちらです。

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.24    |
+-----------+
1 row in set (0.00 sec)

Employees Sample Databaseを使ってみる

まずは、リポジトリをgit cloneします。ブランチをzipでダウンロードしてもよいでしょう。

$ git clone https://github.com/datacharmer/test_db.git

今回使用するリビジョンです。

$ git log -n 1
commit e5f310ac7786a2a181a7fc124973725d7aa4ce7c (HEAD -> master, tag: v1.0.7, origin/master, origin/HEAD)
Author: Giuseppe Maxia <g.maxia@gmail.com>
Date:   Mon Sep 7 06:24:50 2020 +0200

    Remove blackhole engine from tests

リポジトリのサイズは、243MBです。

$ du -sh test_db
243M    test_db

うち、.gitが75MBですけど。

$ du -sh test_db/.git
75M test_db/.git

使い方は、mysqlコマンドにemployees.sqlファイルを渡せばOKです。

$ mysql -u[ユーザー名] -p < employees.sql

この時のユーザーの権限としては、以下が必要になるようです。

SELECT, INSERT, UPDATE, DELETE, 
CREATE, DROP, RELOAD, REFERENCES, 
INDEX, ALTER, SHOW DATABASES, 
CREATE TEMPORARY TABLES, 
LOCK TABLES, EXECUTE, CREATE VIEW

employees.sqlファイルには、DDLとデータをロードする文が入っています。create databaseまで入っていて、データは
employeesデータベースに入ります。

DROP DATABASE IF EXISTS employees;
CREATE DATABASE IF NOT EXISTS employees;
USE employees;

ちなみに、パーティション化されたテーブルを使いたい場合は、employees_partitioned.sqlを使うようです。

実行時のログ。

INFO
CREATING DATABASE STRUCTURE
Note (Code 1051): Unknown table 'employees.dept_emp'
Note (Code 1051): Unknown table 'employees.dept_manager'
Note (Code 1051): Unknown table 'employees.titles'
Note (Code 1051): Unknown table 'employees.salaries'
Note (Code 1051): Unknown table 'employees.employees'
Note (Code 1051): Unknown table 'employees.departments'
INFO
storage engine: InnoDB
INFO
LOADING departments
INFO
LOADING employees
INFO
LOADING dept_emp
INFO
LOADING dept_manager
INFO
LOADING titles
INFO
LOADING salaries
data_load_time_diff
00:01:17

できあがったテーブルです。

mysql> show tables;
+----------------------+
| Tables_in_employees  |
+----------------------+
| current_dept_emp     |
| departments          |
| dept_emp             |
| dept_emp_latest_date |
| dept_manager         |
| employees            |
| salaries             |
| titles               |
+----------------------+
8 rows in set (0.00 sec)

ドキュメントにはテーブルが6つ、と書かれていたはずなのに、8つありますけど?と思いましたが、うち2つはviewですね。

$ grep VIEW employees.sql 
CREATE OR REPLACE VIEW dept_emp_latest_date AS
CREATE OR REPLACE VIEW current_dept_emp AS

各テーブル、viewの件数。

mysql> select count(1) from current_dept_emp;
+----------+
| count(1) |
+----------+
|   300024 |
+----------+
1 row in set (1.15 sec)

mysql> select count(1) from departments;
+----------+
| count(1) |
+----------+
|        9 |
+----------+
1 row in set (0.00 sec)

mysql> select count(1) from dept_emp;
+----------+
| count(1) |
+----------+
|   331603 |
+----------+
1 row in set (0.02 sec)

mysql> select count(1) from dept_emp_latest_date;
+----------+
| count(1) |
+----------+
|   300024 |
+----------+
1 row in set (0.45 sec)

mysql> select count(1) from dept_manager;
+----------+
| count(1) |
+----------+
|       24 |
+----------+
1 row in set (0.00 sec)

mysql> select count(1) from employees;
+----------+
| count(1) |
+----------+
|   300024 |
+----------+
1 row in set (0.02 sec)

mysql> select count(1) from salaries;
+----------+
| count(1) |
+----------+
|  2844047 |
+----------+
1 row in set (0.08 sec)

mysql> select count(1) from titles;
+----------+
| count(1) |
+----------+
|   443308 |
+----------+
1 row in set (0.04 sec)

一部、データを見てみましょう。

mysql> select * from departments limit 10;
+---------+--------------------+
| dept_no | dept_name          |
+---------+--------------------+
| d009    | Customer Service   |
| d005    | Development        |
| d002    | Finance            |
| d003    | Human Resources    |
| d001    | Marketing          |
| d004    | Production         |
| d006    | Quality Management |
| d008    | Research           |
| d007    | Sales              |
+---------+--------------------+
9 rows in set (0.00 sec)

mysql> select * from employees limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  10002 | 1964-06-02 | Bezalel    | Simmel    | F      | 1985-11-21 |
|  10003 | 1959-12-03 | Parto      | Bamford   | M      | 1986-08-28 |
|  10004 | 1954-05-01 | Chirstian  | Koblick   | M      | 1986-12-01 |
|  10005 | 1955-01-21 | Kyoichi    | Maliniak  | M      | 1989-09-12 |
|  10006 | 1953-04-20 | Anneke     | Preusig   | F      | 1989-06-02 |
|  10007 | 1957-05-23 | Tzvetan    | Zielinski | F      | 1989-02-10 |
|  10008 | 1958-02-19 | Saniya     | Kalloufi  | M      | 1994-09-15 |
|  10009 | 1952-04-19 | Sumant     | Peac      | F      | 1985-02-18 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau  | F      | 1989-08-24 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.00 sec)

mysql> select * from salaries limit 10;
+--------+--------+------------+------------+
| emp_no | salary | from_date  | to_date    |
+--------+--------+------------+------------+
|  10001 |  60117 | 1986-06-26 | 1987-06-26 |
|  10001 |  62102 | 1987-06-26 | 1988-06-25 |
|  10001 |  66074 | 1988-06-25 | 1989-06-25 |
|  10001 |  66596 | 1989-06-25 | 1990-06-25 |
|  10001 |  66961 | 1990-06-25 | 1991-06-25 |
|  10001 |  71046 | 1991-06-25 | 1992-06-24 |
|  10001 |  74333 | 1992-06-24 | 1993-06-24 |
|  10001 |  75286 | 1993-06-24 | 1994-06-24 |
|  10001 |  75994 | 1994-06-24 | 1995-06-24 |
|  10001 |  76884 | 1995-06-24 | 1996-06-23 |
+--------+--------+------------+------------+
10 rows in set (0.00 sec)

mysql> select * from titles limit 10;
+--------+-----------------+------------+------------+
| emp_no | title           | from_date  | to_date    |
+--------+-----------------+------------+------------+
|  10001 | Senior Engineer | 1986-06-26 | 9999-01-01 |
|  10002 | Staff           | 1996-08-03 | 9999-01-01 |
|  10003 | Senior Engineer | 1995-12-03 | 9999-01-01 |
|  10004 | Engineer        | 1986-12-01 | 1995-12-01 |
|  10004 | Senior Engineer | 1995-12-01 | 9999-01-01 |
|  10005 | Senior Staff    | 1996-09-12 | 9999-01-01 |
|  10005 | Staff           | 1989-09-12 | 1996-09-12 |
|  10006 | Senior Engineer | 1990-08-05 | 9999-01-01 |
|  10007 | Senior Staff    | 1996-02-11 | 9999-01-01 |
|  10007 | Staff           | 1989-02-10 | 1996-02-11 |
+--------+-----------------+------------+------------+
10 rows in set (0.00 sec)

ロードに使われるダンプファイル。

$ wc -l load_*  
       10 load_departments.dump
   331603 load_dept_emp.dump
       48 load_dept_manager.dump
   300024 load_employees.dump
   967330 load_salaries1.dump
   946986 load_salaries2.dump
   929732 load_salaries3.dump
   443308 load_titles.dump
  3919041 total

この存在は、ちょっと覚えておきましょう。