developer tip

Amazon RDS에서 csv 파일로 테이블 내보내기

optionbox 2020. 12. 12. 10:37
반응형

Amazon RDS에서 csv 파일로 테이블 내보내기


Amazon RDS에서 실행중인 mysql 데이터베이스가 있는데 전체 테이블을 csv 형식으로 내보내는 방법을 알고 싶습니다. 현재 Windows에서 mysql 서버를 사용하여 Amazon 데이터베이스를 쿼리하지만 내보내기를 실행하려고하면 오류가 발생합니다. 아마 Amazon RDS 전용 파일 서버가 없기 때문일 것입니다. 이것에 대한 해결책이 있습니까?


쿼리 를 통해 Amazon RDS 데이터베이스 에서 내보내려고하는데 SELECT ... INTO OUTFILE, 이로 인해 실제로 일반적으로 발생하는 문제가 발생합니다 (예 : CSV로 데이터베이스 내보내기 참조) . 각각의 AWS 팀 응답 은 서버 액세스가 부족하다는 가정을 확인하여 이와 같은 내보내기를 방지 하고 mysql 명령 줄 클라이언트에서 데이터를 선택하고 출력을 파이핑하여 데이터를 다시 형식화하여 CSV 형식으로 데이터 를 내보내는 방법을 제안합니다. CSV 로 다음과 같이 :

mysql -u username -p --database=dbname --host=rdshostname --port=rdsport --batch 
  -e "select * from yourtable" 
  | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > yourlocalfilename

사용자 fpalero 필드를 미리 알고 지정하는 경우 대안 적이고 단순한 접근 방식을 제공합니다 .

mysql -uroot -ppassword --database=dbtest 
  -e "select concat(field1,',',field2,',',field3) FROM tabletest" > tabletest.csv

행운을 빕니다!


RDS mySQL에 연결하는 EC2에서 Yii Framework를 사용하고 있습니다. 핵심은 fputcsv ()를 사용하는 것입니다. 다음은 내 로컬 호스트와 프로덕션 모두에서 완벽하게 작동합니다.

$file = 'path/to/filename.csv';
$export_csv = "SELECT * FROM table";

$qry = Yii::app()->db->createCommand($export_csv)->queryAll();

$fh = fopen($file, "w+");
foreach ($qry as $row) {
    fputcsv($fh, $row, ',' , '"');
}
fclose ($fh);

우선, Steffen의 답변은 대부분의 경우에 효과가 있으며, 나는 그것을 찬성했고 몇 년 동안 그것을 사용했습니다.

나는 최근에 "sed"만으로는 충분하지 않은 더 크고 복잡한 출력을 만났고이를 정확히 수행하기위한 간단한 유틸리티를 찾기로 결정했습니다.

MySQL CLI의 출력을 구문 분석 할 수있는 sql2csv라는 모듈을 빌드합니다.

$ mysql my_db -e "SELECT * FROM some_mysql_table" 

+----+----------+-------------+---------------------+
| id | some_int | some_str    | some_date           |
+----+----------+-------------+---------------------+
|  1 |       12 | hello world | 2018-12-01 12:23:12 |
|  2 |       15 | hello       | 2018-12-05 12:18:12 |
|  3 |       18 | world       | 2018-12-08 12:17:12 |
+----+----------+-------------+---------------------+

$ mysql my_db -e "SELECT * FROM some_mysql_table" | sql2csv

id,some_int,some_str,some_date
1,12,hello world,2018-12-01 12:23:12
2,15,hello,2018-12-05 12:18:12
3,18,world,2018-12-08 12:17:12

내장 된 CLI를 사용할 수도 있습니다.

sql2csv -u root -p "secret" -d my_db --query "SELECT * FROM some_mysql_table;"

1,12,hello world,2018-12-01 12:23:12
2,15,hello,2018-12-05 12:18:12
3,18,world,2018-12-08 12:17:12

더 많은 정보 https://github.com/gabfl/sql2csv


Assuming MySQL in RDS, an alternative is to use batch mode which outputs TAB-separated values and escapes newlines, tabs and other special characters. I haven't yet struck a CSV import tool that can't handle TAB-separated data. So for example:

$ mysql -h myhost.rds.amazonaws.com -u user -D my_database -p --batch --quick -e "SELECT * FROM my_table" > output.csv

As noted by Halfgaar above, the --quick option flushes immediately so avoids out-of-memory errors for large tables. To quote strings (recommended), you'll need to do a bit of extra work in your query:

SELECT id, CONCAT('"', REPLACE(text_column, '"', '""'), '"'), float_column
  FROM my_table

The REPLACE escapes any double-quote characters in the text_column values. I would also suggest using iso8601 strings for datetime fields, so:

SELECT CONCAT('"', DATE_FORMAT(datetime_column, '%Y%m%dT%T'), '"') FROM my_table

Be aware that CONCAT returns NULL if you have a NULL column value.

I've run this on some fairly large tables with reasonable performance. 600M rows and 23GB data took ~30 minutes when running the mysql command in the same VPC as the RDS instance.

참고URL : https://stackoverflow.com/questions/9536224/exporting-table-from-amazon-rds-into-a-csv-file

반응형