์์นด๋ฐ๋ฏธ ์์ ์๊ฐ์ https://jumin.mois.go.kr/ ์์ ๋ค์ด๋ฐ์ csv ํ์ผ์ Mysql์ import ํด์ผํ๋ ์ค์ต์ด ์์๋ค.
Datagrip์ผ๋ก ํธํ๊ฒ ์ฅ ๋ฃ์ด๋ฒ๋ฆฌ๋ ค๊ณ ํ๋๋ฐ
csv ํ์ผ ์ปฌ๋ผ๋ช ์ด ํ๊ธ์ด์ด์ ๊ธ์๊ฐ ๋ค ๊นจ์ง๊ณ ๋๋ฆฌ๊ฐ ๋ฌ๋ค.
๊ทธ์์ค์ Mysql Workbench๋ก ์์ ํ๋ ํ์๋ถ๊ป์ ์ง๋ฌธ์ ํ์ ์
Datagrip๊ฐ์ ํด์ ๋์ ์์ด ํฐ๋ฏธ๋ ๋ช ๋ น์ด๋ง์ผ๋ก ํด๊ฒฐํ๋ ค๊ณ ์ด๊ฒ์ ๊ฒ ์ฐพ์๋ณด์๋ค.
1๏ธโฃ ํ์ผ๋ช ๊ณผ ํ์ผ ์ธ์ฝ๋ฉ ์ค์
์ฐ์ ํ์ผ ์ด๋ฆ๋ถํฐ ํ๊ธํ์ผ์ด๋ผ์ ํฐ๋ฏธ๋์์ ํ์ผ๋ช ์ ์ ๋ ฅํ๋ ๊ฒ๋ถํฐ ์ฝ์ง ์์๋ค.
ใ ใ ๊ทธ๋์ ๋ค์ด๋ฐ์ ํ์ผ ์ด๋ฆ์ ์์ด(population_202410_1.csv)๋ก ๋ฐ๊ฟ์ฃผ๊ณ ,
ํน์ ๋ชฐ๋ผ์ ์๋ ๋ช ๋ น์ด๋ก ํ์ผ ์์ฒด์ ์ธ์ฝ๋ฉ ๋ํ utf-8๋ก ๋ฐ๊ฟ์ฃผ์๋ค.
iconv -f euc-kr -t utf-8 population_202410_1.csv > population_202410_utf8.csv
2๏ธโฃ ๋์ปค Mysql ์ปจํ ์ด๋ ๋ด๋ถ ์ฌ๋ฐ๋ฅธ ๊ฒฝ๋ก๋ก csv ํ์ผ ์ด๋
์ธ์ฝ๋ฉ ์ค์ ๊น์ง ๋ง์น ํ์ผ์ ๋์ปค ์ปจํ ์ด๋ ๋ด๋ถ์ ์์ ๋๋ ํ ๋ฆฌ๋ก ํ์ผ์ ๋ณต์ฌํด์ฃผ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ LOAD DATA INFILE ... ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ MYSQL ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋ ํ ์ด๋ธ๋ก csv ํ์ผ์ import ํ๋ ค๊ณ ํ๋ค.
๊ทธ๋ฌ์ [HY000][1290] The MySQL server is running with the --secure-file-priv option so it cannot execute this statement ์๋ฌ๊ฐ ๋ฐ์ํ์๋ค.
์ด ์๋ฌ ๋ฉ์์ง๋ MYSQL ์๋ฒ๊ฐ --secure-file-priv ์ต์ ์ผ๋ก ์ค์ ๋์ด, ํ์ฉ๋ ๋๋ ํ ๋ฆฌ๋ก๋ถํฐ๋ง ํ์ผ์ ๋ก๋ํ ์ ์๋ค๋ ๋ป์ด์๋ค.
ํ์ฉ๋ ๋๋ ํ ๋ฆฌ๋ค ๋ชฉ๋ก์ ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
SHOW VARIABLES LIKE 'secure_file_priv';
์คํ ๊ฒฐ๊ณผ ํ์ฌ MySQL ์ค์ ์์ผ๋ก๋ /var/lib/mysql-files/ ํ์์ ์๋ ํ์ผ๋ค๋ง ์ฝ์ ์ ์๋ค๋ ๊ฒ์ ์์๋ค.
๊ทธ๋์ ๋์ปค ์ปจํ ์ด๋ ๋ด๋ถ /var/lib/mysql-files/ ๊ฒฝ๋ก๋ก csv ํ์ผ์ ๋ค์ ์ฎ๊ฒจ์ฃผ์๋ค.
3๏ธโฃ ์ปฌ๋ผ ํ์ ๊ณผ ๋ฐ์ดํฐ ํ์ ์ ์ผ์น์์ผ csv ํ์ผ importํ๊ธฐ
๋๋์ด csvํ์ผ์ ์ฌ๋ฐ๋ฅธ ๊ฒฝ๋ก๋ก ์ฎ๊ฒผ์ผ๋, ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋ ํ ์ด๋ธ๋ก import ํ๋ ค๊ณ ํ๋ค.
LOAD DATA INFILE '/var/lib/mysql-files/population_202410_utf8.csv'
INTO TABLE MonthlyPopulation
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(region, total_population, household_count, population_per_household, male_population, female_population, gender_ratio);
๊ทธ๋ฌ์ [01000][1265] Data truncated for column 'total_population' at row 1 ์๋ฌ๊ฐ ๋ฐ์ํ์๋ค..
ํด๋น ์๋ฌ๋ ๋ฐ์ดํฐ ํ์ ์ด ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ์๋ฌ๋ผ๊ณ ํ๋ค.
๐ ์๋ฌ ์์ธ
์ฒ์์๋ csv ํ์ผ์ ์ฒซ๋ฒ์งธ ์ค ๋๋ฌธ์ธ ์ค ์์๋ค.
๊ทธ๋ฌ๋ ์ฒซ๋ฒ์งธ ์ค์ IGNORE 1 ROWS ๋ฅผ ์ ์ด์ฃผ์๊ธฐ ๋๋ฌธ์ ์ฝ์ง ์๊ณ ๋์ด๊ฐ ๊ฒ์ด๋ค.
์ฆ ์๋ฌ ๋ฐ์ ์์ธ์ ์ฒซ ๋ฒ์งธ ์ค ๋๋ฌธ์ ์๋๋ผ๋ ๊ฒ์ด๋ค.
์๋ณธ csv ํ์ผ์ ์ข ๋ ์์ธํ ๋ฏ์ด๋ณด๋ ์ซ์๋ฐ์ดํฐ์ ์ฝค๋ง(,)๊ฐ ์ฝ์ ๋์ด ์์๋ค.
csv ํ์ผ์ ์์ ๋ก ์ด์ด์ ์์ ์์ ์ฝค๋ง๋ฅผ ์๋์ผ๋ก ์ฝ์ ํด์ค ๊ฑด ์ค ์์๋๋ฐ, csvํ์ผ ์์ฒด์ ์ฝค๋ง๊ฐ ์๋ ๊ฒ์ด์๋ค.
ํ ์ด๋ธ ์คํค๋ง์์๋ ์ด์ธ๊ตฌ์ ์ปฌ๋ผ๊ณผ ์ธ๋์ ์ปฌ๋ผ์ด int๋ก ์ ์๋์ด ์์ง๋ง,
csv ํ์ผ์์๋ ์ซ์๋ค ์ฌ์ด์ฌ์ด์ ์ฝค๋ง๊ฐ ์ฝ์ ๋์ด ์๋ค ๋ณด๋ ๊ฐ ์์ฑ๋ค์ ์ซ์๊ฐ ์๋ ๋ฌธ์์ด๋ก ์ธ์ํด๋ฒ๋ฆฐ ๊ฒ์ด๋ค.
์ฆ String ๋ฐ์ดํฐ๋ฅผ int ์ปฌ๋ผ์ ์ง์ด๋ฃ์ผ๋ ค๊ณ ํ๋ ๋ฐ์ดํฐ ํ์ ์ด ์ ๋ง์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ.
๊ทธ๋์ ๋ฐ์ดํฐ ๋ก๋ํ๋ ๋ช ๋ น์ด๋ฅผ ์๋์ ๊ฐ์ด ์์ ํ์ฌ
LOAD DATA INFILE '/var/lib/mysql-files/population_202410_utf8.csv'
INTO TABLE MonthlyPopulation
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(@region, @total_population, @household_count, @population_per_household, @male_population, @female_population, @gender_ratio)
SET
region = @region,
total_population = CAST(REPLACE(@total_population, ',', '') AS UNSIGNED),
household_count = CAST(REPLACE(@household_count, ',', '') AS UNSIGNED),
population_per_household = @population_per_household,
male_population = CAST(REPLACE(@male_population, ',', '') AS UNSIGNED),
female_population = CAST(REPLACE(@female_population, ',', '') AS UNSIGNED),
gender_ratio = @gender_ratio;
์ซ์๋ก ๋ค์ด๊ฐ์ผ ํ์ง๋ง ๋ฌธ์์ด๋ก ์ธ์๋ ์์ฑ๊ฐ๋ค์ ์ผ์ผํ ์ซ์ ํ์ ์ผ๋ก ์บ์คํ ํด์ฃผ๋๋ก ์ค์ ํด์ฃผ์๋ค.
๊ทธ๋ฌ์ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก import๋์๋ฐ.
์ด๋ ๊ฒ ์ ์ฒ๋ฆฌ๋์ง ์์ csv ํ์ผ์ DB์ ๋ฐ๋ก ์ฝ์ ํ๋ ๊ฒ์ด ๋งค์ฐ ๋ณต์กํ๊ณ ๋ถํธํ๊ณ ๋นํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ์๋ ค์ฃผ๊ธฐ ์ํด ์งํํด๋ณธ ์ค์ต์ด๋ผ๊ณ ํ๋ค.
'์ค๋ฅ ํด๊ฒฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Security ์ฌ์ฉ์ h2 ์น ์ฝ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ (0) | 2025.03.06 |
---|---|
[Docker] ๋ญ ์ง์ ํด๋ is the docker daemon running? ์ค๋ฅ (2) | 2024.12.19 |
MSSQL ํ๊ธ ์ธ์ฝ๋ฉ ๋ฌธ์ (???๋ก ํ์) (3) | 2024.11.06 |
์ฉ๋ ๋ฌธ์ ๋ก Git ๋ฆฌํฌ์งํ ๋ฆฌ push ์คํจ (2) | 2024.10.16 |
Ubuntu ๊ฐ์๊ธฐ cli๋ก ๋์ค๋ ๋ฌธ์ (0) | 2024.09.30 |