데이터 파이프라인, 마트 개발 업무를 맡게 되면서 SQL 역량에 대한 필요성을 많이 느낀다. 데이터베이스 엔지니어로 일했던 이전까지의 경력에서는 DB 인스턴스 레벨에서 시스템 구축에 눈높이가 맞춰져있었다.
DB 성능을 개선하는 일을 많이 해보기는 했지만 인스턴스 리포트의 몇가지 지표를 보고 적절한 설정을 하는 일들 위주였고, SQL은 이미 짜여진 쿼리를 간단히 변형해보는 정도이거나 시스템 카탈로그를 뒤지는 정도의 쿼리 밖에 해보지 못한 것 같다.
회사에 이미 잘 만들어져있는 마트 SQL들을 통해 공부해야겠지만 혹시나 이해가 잘 안되는 부분이 있을때는 같은 방식으로 테스트해볼 수 있는 데이터가 있었으면 했는데 마침 mysql 에서 공식적(https://dev.mysql.com/doc/employee/en/)으로 샘플 데이터를 제공한다.
깃헙(https://github.com/datacharmer/test_db)에서 내려받을 수 있고 아래와 같이 간단하게 import 할 수 있다.
git clone https://github.com/datacharmer/test_db.git
cd test_db
mysql -u root -p < employees.sql
mysql -u root -p < employees_partitioned.sql #파티션 테이블로 생성하는 경우
성공적으로 로딩이 끝나면 다음과 같이 데이터베이스가 생성된 것을 확인할 수 있다. 데이터도 적당히 들어있다.
--mysql -uroot -p -D employees
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)
mysql> desc employees;
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no | int(11) | NO | PRI | NULL | |
| birth_date | date | NO | | NULL | |
| first_name | varchar(14) | NO | | NULL | |
| last_name | varchar(16) | NO | | NULL | |
| gender | enum('M','F') | NO | | NULL | |
| hire_date | date | NO | | NULL | |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
mysql> select count(*) from employees;
+----------+
| count(*) |
+----------+
| 300024 |
+----------+
1 row in set (0.09 sec)
지난 일이지만 티베로도 이런 샘플데이터와 개발자 커뮤니티가 있었으면 참 좋았을 것 같은데 다음에 티베로 데이터 샘플 깃헙 레파지토리를 한번 만들어봐야겠다.
기존에 만들어져 있는 마트에 이용된 문법을 이 데이터베이스에서 구현해보는 것 위주로 공부해볼 예정이며 빅데이터 플랫폼에서 쿼리하는 일이 대부분이기 때문에 ANSI SQL로 쿼리를 작성하는 방법에도 익숙해져야할 것 같다.
실제 와닿는 내용을 뽑아보고싶을 때에는 nextcloud 메타 테이블로 여러 요약 정보를 뽑아보는 것도 재미있을 것 같다.