테이블 정보 불러오기

mysql> desc user_log;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| nickname   | varchar(64)   | YES  |     | NULL    |       |
| money      | decimal(10,2) | YES  |     | NULL    |       |
| last_visit | datetime      | YES  |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

테스트 입력값 만들어보기

Dimport java.util.Random;

public class Test {

    private static Random r = new Random();

    public static void main(String[] args) {
        Test test = new Test();
        test.genData(100, 16);

    }

    private void genData(int count, int clen) {
        for (int i = 0; i < count; i++) {
            System.out.printf("%d,%s\n", i, genStr(clen));

        }
    }

    private Object genStr(int clen) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < clen; i++) {
            sb.append((char) ('a' + r.nextInt(24)));
        }
        return sb.toString();

    }
}

과정

  1. 위 예제처럼 자동으로 데이터를 만들 수 있는 코드를 짠다.
  2. 코드를 터미널에서 컴파일.
  3. 터미널에서 실행 - 생성하고 싶은 갯수만큼의 데이터를 만들어서 csv파일로 저장.
    예시: $ java Main 1000000 > bigdata.csv
    뜻: 100만을 메인에 입력하면 100만개만큼 더미데이터를 만들어서 bigdata.csv에 저장한다.
  4. 데이터를 테이블에 입력한다.
mysql> LODA DATA LOCAL INFILE 'big.csv' (로컬 데이터 big.scv를 로드)
	-> INTO TABLE table_name (테스트 테이블에 넣는다)
    -> FIELDS TERMINATED BY ',' (필드가 ','로 끝난다)
    -> ; (끝)
  
Qurey OK, 1000000 rows affected (1.12 sec)
Records: 1000000 Deleted: 0 Skipped: 0 Warnings: 0

잘들어갔는지 확인

select * from table_name

참고: 보통 외주해서 대용랑 파일을 받아오는데 첫번째 데이터에 테이블 정보가 들어가있어서 망하는 경우가 있다. 그거 무시하려면 끝에 IGNORE 1 LINES 라고 입력해주면 됨

참고

honux MySQL bulk insert

profile
TIL 남기는 공간입니다

2개의 댓글

comment-user-thumbnail
2022년 6월 29일

안녕하세요 22년도 백엔드 코스 짱민이라고 합니닼ㅋㅋㅋㅋ
대용량 데이터 삽입을 찾다가 좋은 글을 발견했는데 마침 선배님 글이라서 반가운 마음에 댓글 남깁니다.....ㅎㅎㅎㅎㅎㅎㅎㅎ

1개의 답글
Powered by GraphCDN, the GraphQL CDN