これは、なにをしたくて書いたもの?
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
この存在は、ちょっと覚えておきましょう。