개요
문화빅데이터포털에서 공공도서관 소장도서 목록을 csv 파일들로 받아 정리하고
서적분류코드를 BookCategory로 정리하여
DB에 삽입한 과정을 작성하였다.
1. Book 데이터 다운로드 및 가공
문화빅데이터 플랫폼에서 공공도서관 소장도서 목록을 다운로드하였다.
22년 3월도 데이터를 다운받았으며 csv 파일 10개 가량이다.
팀원분이 파이썬을 이용하여 필요한 데이터셋(저자, 출판년도, 책이름, 분류기호) 만 추출하고 중복을 제거하였다.
2. BookCategory 작성
Book 데이터에서 책의 도서분류코드는 ex) 812.43 이런식으로 구성되어있다. 백의자리와 십의자리만을 포함한 810이 이 책의 십진분류표상 도서분류이고 분류는 아래와 같다.
순서대로 000 총류 -> id 1, 010 도서학 --> id 2 .... 로 DB에 삽입할 수 있도록 csv 파일을 작성하였다.
3. MySql 삽입
local infile 기능을 사용해 MYsql에 위에서 작성한 Book, BookCategory 데이터를 삽입하였다.
삽입 과정은 아래와 같다.
1. mysql을 cmd에서 mysql --local-infile -u root -p 로 실행
2. mysql에서 아래 코드 입력
show global variables like 'local_infile';
Plain Text
복사
false가 나올 경우 아래 코드 입력하여 true 로 변경
set global local_infile=true;
Plain Text
복사
안바꾸면 ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides 오류 남
3. 아래의 코드 입력하여 BookCategory 먼저 삽입
LOAD DATA LOCAL INFILE 'C:\\Users\\정강용\\Downloads\\bookCategory.csv'
INTO TABLE final.book_category
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(@a1, @a2)
SET
book_category_isbn_code = @a1,
book_category_name = @a2;
Plain Text
복사
4. 아래의 코드 입력하여 Book Data 삽입
LOAD DATA LOCAL INFILE 'C:\\Users\\정강용\\Downloads\\result.csv'
INTO TABLE final.book
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(@a1, @a2, @a3, @a4)
SET
book_name = @a2,
book_author = @a1,
book_publish = @a3,
book_status = 'POSSIBLE',
book_category_id = CASE
WHEN @a4 = '' THEN NULL
WHEN POSITION('.' IN @a4) = 0 AND FLOOR(CAST(@a4 AS SIGNED INTEGER) / 10) >= 100 THEN NULL
WHEN POSITION('.' IN @a4) = 0 THEN FLOOR(CAST(@a4 AS SIGNED INTEGER) / 10) + 1
WHEN FLOOR(CAST(SUBSTRING_INDEX(@a4, '.', 1) AS SIGNED INTEGER) / 10) >= 100 THEN NULL
ELSE FLOOR(CAST(SUBSTRING_INDEX(@a4, '.', 1) AS SIGNED INTEGER) / 10) + 1
END;
Plain Text
복사
설명을 덧붙이자면 분류기호가 810일 시 DB에 82번 index로 저장되어 있다.
따라서 DB의 분류기호를 10으로 나누고 1을 더해서 BookCategory의 id를 입력하게 하였다.