mysql 을 서버에서 자주 쓰는 사람들이라면 익숙할 명령어 : -e
mysql -u$USER -p$PW $DB -e "select * from table_name"
을 하면
$ mysql --local-infile=1 -e "select * from TABLE_NAME limit 10;"
+----------------------------------+---------------------+---------------------+-------------+------------+------------+-------------+--------------------+-----
collect_date | equip_date | key_id | data_id | point_id | point_value | point_change_value | etc |
+----------------------------------+---------------------+---------------------+-------------+------------+------------+-------------+--------------------+------| 2017-08-01 00:00:00 | 2017-08-01 00:15:00 | aaaaaaaaaaaa | bbbbbbbbbb | 0103000011 | 5532.000 | 0.00000 | |
2017-08-01 00:15:00 | 2017-08-01 00:30:00 | aaaaaaaaaaaa | bbbbbbbbbb | 0103000011 | 5532.000 | 0.00000 | |
2017-08-01 00:30:00 | 2017-08-01 00:45:00 | aaaaaaaaaaaa | bbbbbbbbbb | 0103000011 | 5546.000 | 14.00000 | |
2017-08-01 00:45:00 | 2017-08-01 01:00:00 | aaaaaaaaaaaa | bbbbbbbbbb | 0103000011 | 5539.000 | -7.00000 | |
2017-08-01 01:00:00 | 2017-08-01 01:15:00 | aaaaaaaaaaaa | bbbbbbbbbb | 0103000011 | 5539.000 | 0.00000 | |
2017-08-01 01:15:00 | 2017-08-01 01:15:00 | aaaaaaaaaaaa | bbbbbbbbbb | 0103000011 | 5539.000 | 0.00000 | |
2017-08-01 01:30:00 | 2017-08-01 01:45:00 | aaaaaaaaaaaa | bbbbbbbbbb | 0103000011 | 5539.000 | 0.00000 | |
2017-08-01 01:45:00 | 2017-08-01 02:00:00 | aaaaaaaaaaaa | bbbbbbbbbb | 0103000011 | 5539.000 | 0.00000 | |
2017-08-01 02:00:00 | 2017-08-01 02:15:01 | aaaaaaaaaaaa | bbbbbbbbbb | 0103000011 | 5539.000 | 0.00000 | |
2017-08-01 02:15:00 | 2017-08-01 02:30:00 | aaaaaaaaaaaa | bbbbbbbbbb | 0103000011 | 5539.000 | 0.00000 | |
이런 비슷한 결과가 나온다.
내가 해야할 일은
LOAD_DATA
즉
http://vivi-world.tistory.com/entry/Mysql-ShellScript-Import-Data-sh-%ED%8C%8C%EC%9D%BC?category=680707
이쪽의 내용을 수정해야 햇다.
요구사항은 컬럼개수를 출력해달라는 것
key 가 같을 때 LOAD DATA LOCAL INFILE은 warning 메세지만 띄우고 아무 결과도 리턴하지 않는다 ;; 극혐
1. 전체 라인 구하기
[ wc -l $DATA_DIR/$TNAME/$FDIR/$FILE | cut -f 1 -d " " ]
FILE의 라인개수를 세고 (wc -l )
결과를 자를 건데( cut ) " " 구분자로 자르고(-d " " ) 1번째 것을 가져온다 (-f 1)
[ cat $FILE | wc -l ]
을 해도 되지만
이는 IO를 많이 잡아먹기에 패스
2. -e select 결과값 가져오기
트랜잭션을 걸엇다.
$ mysql -e "START TRANSACTION;LOAD DATA LOCAL INFILE '$FILE' INTO TABLE TABLE_NAMECHARACTER SET UTF8 FIELDS TERMINATED BY ',';SELECT ROW_COUNT();COMMIT;"
+-------------+
| ROW_COUNT() |
+-------------+
| 0 |
+-------------+
mysql -u$USER -p$PW $DB --local-infile=1 -Bse "START TRANSACTION;LOAD DATA LOCAL INFILE '$DATA_DIR/$TNAME/$FDIR/$FILE' INTO TABLE $TNAME CHARACTER SET UTF8 FIELDS TERMINATED BY ',' ;SELECT ROW_COUNT();COMMIT;"`
==================================================================================
Table Name : test / DIR : test_t1
test_t1-20170802000000.csv ( Runtime: 0 FILECOUNT : 792 / ROWS : 792 )
test_t1-20170803000000.csv ( Runtime: 0 FILECOUNT : 759 / ROWS : 759 )
test_t1-20170804000000.csv ( Runtime: 0 FILECOUNT : 792 / ROWS : 792 )
==================================================================================
'Develope > LINUX' 카테고리의 다른 글
[Linux] SSH port 설정 ConnectException: 연결이 거부됨 (Connection refused) (1) | 2018.02.27 |
---|---|
[shell script] 프로세스 실행 체크 스크립트 (0) | 2018.01.08 |
[Linux] Cron 이 안될 때, 실행은 되는데 결과가 이상할 때, 실행도 안될 떄; (0) | 2017.11.16 |
[ShellScript] 프로세스 시작, 종료 sh (feat. 데몬) (0) | 2017.11.16 |
[Mysql, ShellScript] Import Data sh 파일 (2) | 2017.11.07 |