これは、なにをしたくて書いたもの?
MySQLに入れる、ほどほどのデータがないかなぁと思って調べてみたら、MySQL自身にあるじゃないですか。
Employees Sample Database、だそうです。
MySQL :: Employees Sample Database
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側を見た方がよいでしょう。
環境
今回の環境は、こちらです。
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
この存在は、ちょっと覚えておきましょう。