DHistory
[Docker] MySQL Container CSV 파일 넣기 - 활용 본문
MySQL Container 기본편
배경
데이터 정합성을 맞추기 위해 데이터 패턴을 확인하는 작업이 필요했습니다.
현재 AWS Aurora (MySQL 5.7)을 사용중이고, 5.7 버전에서는 regex를 이용하여 데이터를 변경하는 비용이 상당했습니다.
이를 해결하고자 MySQL 8.0에서 지원하는 regexp_replace() 함수를 사용하고자 합니다.
MySQL 8.0을 새로 설치할 수 없는 환경이기 때문에 docker를 이용하여 MySQL 8.0을 설치하여 진행했습니다.
진행방법
1. MySQL Container 기본편을 활용하여 docker 설치 후 csv 파일을 docker로 옮깁니다.
2. csv 파일 데이터를 담을 Table을 생성합니다.
# number이지만 문자열이 들어와있는 경우가 있음
create table test(
id bigint,
number varchar(60)
);
create index idx_test_m1 on test(id);
create index idx_test_m2 on test(number);
2. Table에 데이터 패턴을 분석할 데이터를 입력합니다.
LOAD DATA LOCAL
INFILE test.csv
INTO TABLE test
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
3. regexp_replace() 함수와 join update를 이용하여 데이터를 변경합니다.
update test origin
join (select regexp_replace(number, '[0-9]', '#') number, id from test) as copy
on origin.id = copy.id
set origin.number = copy.number
;
4. 이후 group by와 count(*)를 이용하여 현재 데이터의 패턴을 추출합니다.
성능이 좋지 않은 쿼리이지만 local에서 돌리는 내용이기에 실 환경에 문제는 없습니다.
select number, count(*)
from test
group by number
order by count(*) desc
;
5. 추출한 데이터(임의값)를 분석합니다.
+--------------------------------+----------+
| number | count(*) |
+--------------------------------+----------+
| +############ | 1234567 |
| | 123456 |
| +############ | 12345 |
| ########## | 12345 |
| ########### | 1234 |
+--------------------------------+----------+
'Programming > Docker' 카테고리의 다른 글
[Docker] 실행 중인 Container 명령어 사용 (0) | 2023.08.23 |
---|---|
[Docker] MySQL Container에 CSV 파일 넣기 - 기본 (0) | 2023.05.23 |