2012-10-19 9 views

답변

-3

예, 파이프 만 사용하십시오.

$ your_command | mysql -u 사용자 -p

죄송합니다.이 답변으로는 충분하지 않습니다. csv를 직접 mysql로 ​​파이프 할 수 없다. 결과가 유효한 SQL이되게하려면 추가 작업이 필요합니다.

또는 데이터베이스에 CSV 파일로드를 지원하는 mysqld native load data infile 구문을 사용하는 것이 좋습니다.

+6

왜이 답변이 주어 졌습니까? 작동하지 않습니다. 왜 그것이 upvoted되고 있습니까? 작동하지 않습니다. 시도 해봐. 구문 오류가 발생합니다. 이것은 "your_command"의 출력이 유효한 SQL 인 경우에만 작동합니다. CSV가 가장 확실한 것은 아닙니다. –

+1

@xdazz 나는이 질문을 제대로 읽지 않아서 정직한 실수를하지 않는 한,이 같은 대답을 게시 한 사람이 101k의 명성을 쌓을 수 있었다는 사실에 놀랐다. 이 답변을 편집 할 때가 되었습니까? – toon81

0

@xdazz는 나보다 빠르지 만 파일에 결과를 넣는 것이 좋습니다. 왜? 그런 식으로 뭔가 잘못되었을 경우 문제를 확인하고 추적 할 수 있습니다. 간헐적 인 문제에 직면하면 항상 도움이되지 않습니다. 물론, 디스크 공간을 보존하기 위해 가져 오기가 완료된 후에는 너무 많이 소비하지 않도록 압축합니다.

1

stdin에서 CSV를 직접 가져올 수있는 것 같지 않습니다. 당신은 MySQL은 확장자없이 테이블의 이름으로 그 이름을 사용하도록 파일에 저장해야합니다, 당신은 같이 mysqlimport가 사용할 수 있습니다

mysqlimport -uUSER -pPASS DB FILE

+0

여기서 우리는 적절한 응답에 가장 가까운 것을 가지고 있는데, 0의 upvotes가있다. –

3

MySQL은 확장을 통해 점점 데이터를 지원 다음과 같이 삽입 :

insert into table (col1, col2, col3) values 
(a,b,c), 
(d,e,f), 
(g,h,i); 

그래서 당신이 왼쪽에 괄호와 오른쪽의 괄호와 쉼표를 포함하도록 CSV를 수정하고 insert into table...로 앞에 추가하고 세미콜론을 추가 할 수 있습니다, 당신이 할 수있는 파이프 직접적 MySQL 커맨드 라인에.

또한 TSV (탭 - 구분하지 쉼표로 구분 된) 이런 load data infile에 파이프 네임드 파이프 유닉스 구조체를 사용할 수있다 : 의사가

mkfifo /tmp/mysqltsv 
cat file.csv | sed -e 's/,/\t/g' > /tmp/mysqltsv 
mysql -e "load data infile '/tmp/mysqltsv' into table tblname" 

된다. 하나의 프로세스에서 cat을 실행하고 다른 프로세스에서 mysql 명령을 실행해야한다. 가장 쉬운 두 가지 터미널을 사용하는 것입니다. 더 고급 배경은 cat|sed입니다.

1

@xdazz의 답변에 따르면 LOAD DATA LOCAL INFILE을 사용하십시오. 나는 그것이 무지 또는 게으름으로 다운 포워드되었다고 생각한다. MySQL 매뉴얼을 열람하면 완벽하게 실행 가능한 대답이 될 것입니다. 대부분의 사용자와 가장 관련이있을 것입니다 2016 년과 MariaDB에 대한

, 당신은이 작업을 수행 :에 맞게 필요에 따라

bash awk '{ /* My script that spits out a CSV */ }' | mysql --local-infile=1 -u user -ppassword mydatabase -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE mytable FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';" 분명히

LOAD DATA INFILE에 옵션을 설명서를 읽고 변경 귀찮게합니까 귀하의 구체적인 사건.

관련 문제