메뉴
Amazon Relational Database Service
사용 설명서 (API Version 2014-10-31)

DB 클러스터의 데이터를 Amazon S3 버킷의 텍스트 파일에 저장

SELECT INTO OUTFILE S3 문을 사용하여 Amazon Aurora DB 클러스터에서 데이터를 쿼리한 후 Amazon S3 버킷에 저장된 텍스트 파일에 직접 저장할 수 있습니다. 이 기능을 통해 먼저 데이터를 클라이언트로 가져온 다음 클라이언트에서 Amazon S3로 복사하는 과정을 생략할 수 있습니다. LOAD DATA FROM S3 문은 이 문에 의해 만들어진 파일을 사용하여 데이터를 Aurora DB 클러스터에 로드할 수 있습니다. 자세한 내용은 Amazon S3 버킷의 텍스트 파일에서 DB 클러스터로 데이터 로드 섹션을 참조하십시오.

참고

Aurora 버전 1.13 이상에서는 테이블의 데이터를 Amazon S3 버킷의 텍스트 파일에 저장할 수 있습니다. Aurora 버전에 대한 자세한 내용은 Amazon Aurora 데이터베이스 엔진 업데이트 단원을 참조하십시오.

Aurora에 Amazon S3 액세스 권한 부여

Amazon S3 버킷에 데이터를 저장하기 전에 Aurora DB 클러스터에 Amazon S3에 액세스할 권한을 부여해야 합니다. 권한을 부여하려면 필요한 권한이 있는 AWS Identity and Access Management(IAM) 역할을 만든 다음 해당 역할을 DB 클러스터와 연결합니다. 또한 Amazon S3로의 아웃바운드 연결을 허용하도록 Aurora DB 클러스터를 구성해야 합니다. 사용자를 대신하여 Aurora DB 클러스터가 Amazon S3와 통신하도록 허용하는 방법에 대한 자세한 내용 및 지침은 사용자를 대신하여 다른 AWS 서비스에 액세스하도록 Amazon Aurora에 권한 부여 단원을 참조하십시오.

참고

aurora_select_into_s3_role 또는 aws_default_s3_role DB 클러스터 파라미터를 새 IAM 역할의 Amazon 리소스 이름(ARN)으로 설정해야 합니다. aurora_select_into_s3_role에 대해 지정된 IAM 역할이 없는 경우 aws_default_s3_role에 지정된 IAM 역할이 사용됩니다.

DB 클러스터 파라미터에 대한 자세한 내용은 DB 클러스터와 DB 인스턴스 파라미터 섹션을 참조하십시오.

Aurora에서 데이터 저장 권한 부여

SELECT INTO OUTFILE S3 문을 실행하는 데이터베이스 사용자에게는 문을 실행할 수 있도록 SELECT INTO S3 권한이 부여되어야 합니다. DB 클러스터의 마스터 사용자 이름에는 SELECT INTO S3 권한이 기본적으로 부여됩니다. 다음 문을 사용하여 다른 사용자에게 권한을 부여할 수 있습니다.

Copy
GRANT SELECT INTO S3 ON *.* TO user@domain-or-ip-address

SELECT INTO S3 권한은 Amazon Aurora에만 적용되며 MySQL 데이터베이스 또는 RDS MySQL DB 인스턴스에서는 사용할 수 없습니다. 복제 마스터인 Aurora DB 클러스터와 복제 클라이언트인 MySQL 데이터베이스 간에 복제를 설정한 경우, GRANT SELECT INTO S3 문으로 인해 오류가 생겨 복제가 중단됩니다. 오류를 건너뛰고 복제를 계속 진행하셔도 됩니다. RDS MySQL DB 인스턴스에서 오류를 건너뛰려면 mysql.rds_skip_repl_error 문을 사용합니다. 외부 MySQL 데이터베이스에서 오류를 건너뛰려면 SET GLOBAL sql_slave_skip_counter 문을 사용합니다.

Amazon S3 버킷의 경로 지정

Amazon S3 버킷에서 데이터 및 매니페스트 파일을 저장할 경로를 지정하는 구문은 다음과 같이 LOAD DATA FROM S3 PREFIX 문에 사용된 것과 비슷합니다.

Copy
s3-region://bucket-name/file-prefix

경로에는 다음 값이 포함됩니다.

  • region(선택 사항) – 데이터를 저장할 Amazon S3 버킷이 포함된 AWS 리전입니다. 이 값은 선택 사항입니다. region 값을 지정하지 않으면 Aurora는 DB 클러스터와 동일한 리전에 있는 Amazon S3에 파일을 저장합니다.

  • bucket-name – 데이터를 저장할 Amazon S3 버킷의 이름입니다. 가상 폴더 경로를 식별하는 객체 접두사가 지원됩니다.

  • file-prefix – Amazon S3에 저장할 파일을 식별하는 Amazon S3 객체 접두사입니다.

SELECT INTO OUTFILE S3 문으로 만들어진 데이터 파일은 다음 경로를 사용합니다. 여기서 00000은 0부터 시작하는 5자리 정수입니다.

Copy
s3-region://bucket-name/file-prefix.part_00000

예를 들어 SELECT INTO OUTFILE S3 문이 데이터 파일을 저장할 경로로 s3-us-west-2://bucket/prefix를 지정하고 3개의 데이터 파일을 만드는 것으로 가정합시다. 지정된 Amazon S3 버킷에는 다음 데이터 파일이 포함됩니다.

  • s3-us-west-2://bucket/prefix.part_00000

  • s3-us-west-2://bucket/prefix.part_00001

  • s3-us-west-2://bucket/prefix.part_00002

데이터 파일을 나열할 매니페스트 만들기

SELECT INTO OUTFILE S3 문을 MANIFEST ON 옵션과 함께 사용하여 문에 의해 만들어진 텍스트 파일을 나열하는 매니페스트 파일(JSON 형식)을 만들 수 있습니다. LOAD DATA FROM S3 문은 매니페스트 파일을 사용하여 데이터 파일을 다시 Aurora DB 클러스터에 로드할 수 있습니다. 매니페스트 파일을 사용하여 데이터 파일을 Amazon S3에서 DB 클러스터로 로드하는 방법에 대한 자세한 내용은 매니페스트 파일을 이용해 로드할 데이터 파일 지정 섹션을 참조하십시오.

SELECT INTO OUTFILE S3 문으로 만들어진 매니페스트 파일에 포함된 데이터 파일은 만들어진 순서대로 나열됩니다. 예를 들어 SELECT INTO OUTFILE S3 문이 데이터 파일을 저장할 경로로 s3-us-west-2://bucket/prefix를 지정하고 데이터 파일 3개와 매니페스트 파일을 만드는 것으로 가정합시다. 지정된 Amazon S3 버킷에는 다음 정보를 포함하는 매니페스트 파일 s3-us-west-2://bucket/prefix.manifest가 있습니다.

Copy
{ "entries": [ { "url":"s3-us-west-2://bucket/prefix.part_00000" }, { "url":"s3-us-west-2://bucket/prefix.part_00001" }, { "url":"s3-us-west-2://bucket/prefix.part_00002" } ] }

SELECT INTO OUTFILE S3

SELECT INTO OUTFILE S3 문을 사용하여 DB 클러스터에서 데이터를 쿼리한 후 Amazon S3 버킷에 저장된 구분 기호로 구분된 텍스트 파일에 직접 저장할 수 있습니다. 압축 파일 또는 암호화된 파일은 지원되지 않습니다.

구문

Copy
SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [FROM table_references [PARTITION partition_list] [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] INTO OUTFILE S3 's3_uri' [CHARACTER SET charset_name] [export_options] [MANIFEST {ON | OFF}] [OVERWRITE {ON | OFF}] export_options: [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ]

파라미터

다음은 SELECT INTO OUTFILE S3 문에서 사용되는 Aurora에 고유한 필수 파라미터 및 선택 파라미터의 목록입니다.

  • s3-uri – 사용할 Amazon S3 접두사의 URI를 지정합니다. Amazon S3 버킷의 경로 지정에서 설명하는 구문을 사용하여 URI를 지정합니다.

  • MANIFEST {ON | OFF} – Amazon S3에서 매니페스트 파일이 만들어졌는지 여부를 나타냅니다. 매니페스트 파일은 LOAD DATA FROM S3 MANIFEST 문으로 Aurora DB 클러스터에 데이터를 로드하는 데 사용할 수 있는 JavaScript Object Notation(JSON) 파일입니다. LOAD DATA FROM S3 MANIFEST에 대한 자세한 내용은 Amazon S3 버킷의 텍스트 파일에서 DB 클러스터로 데이터 로드 단원을 참조하십시오.

    쿼리에서 MANIFEST ON을 지정할 경우 모든 데이터 파일이 만들어지고 업로드된 후 Amazon S3에서 매니페스트 파일이 만들어집니다. 매니페스트 파일은 다음 경로를 사용하여 만들어집니다.

    Copy
    s3-region://bucket-name/file-prefix.manifest

    매니페스트 파일 내용의 형식에 대한 자세한 내용은 데이터 파일을 나열할 매니페스트 만들기 섹션을 참조하십시오.

  • OVERWRITE {ON | OFF} – 지정된 Amazon S3 버킷의 기존 파일을 덮어쓸지 여부를 나타냅니다. OVERWRITE ON을 지정할 경우 s3-uri에 지정된 URI에서 파일 접두사와 일치하는 기존 파일이 덮어쓰입니다. 그렇지 않으면 오류가 발생합니다.

MySQL 설명서의 SELECT SyntaxLOAD DATA INFILE Syntax 섹션에서 다른 파라미터에 대한 자세한 내용을 확인할 수 있습니다.

고려 사항

Amazon S3 버킷에 만들어지는 파일 개수는 SELECT INTO OUTFILE S3 문에서 선택된 데이터의 양과 Aurora의 파일 크기 임계값에 따라 달라집니다. 기본 파일 크기 임계값은 6기가바이트(GB)입니다. 문에서 선택된 데이터가 파일 크기 임계값보다 작으면 파일이 한 개 만들어지고, 그렇지 않으면 파일이 여러 개 만들어집니다. 이 문으로 만들어지는 파일에 대한 다른 고려 사항은 다음과 같습니다.

  • Aurora는 데이터 파일의 행이 파일 경계를 너머 분할되지 않게 해줍니다. 파일이 여러 개인 경우 마지막 파일을 제외하고 각 데이터 파일의 크기는 기본적으로 파일 크기 임계값에 근접합니다. 하지만 파일 크기 임계값을 준수하려면 행이 두 데이터 파일로 분할되는 경우가 간혹 있습니다. 이런 경우 Aurora가 행을 원래대로 유지하는 데이터 파일을 만들지만 파일 크기 임계값이 초과될 수 있습니다.

  • Aurora의 각 SELECT 문은 원자성 트랜잭션으로 실행되므로 대량 데이터 세트를 선택한 SELECT INTO OUTFILE S3 문은 실행하는 데 시간이 약간 걸릴 수 있습니다. 어떤 이유든 문이 실패할 경우 처음부터 다시 문을 실행해야 합니다. 하지만 문이 실패할 경우 이미 Amazon S3에 업로드된 파일은 지정된 Amazon S3 버킷에 유지됩니다. 처음부터 다시 시작하는 대신 다른 문을 사용하여 나머지 데이터를 업로드할 수 있습니다.

  • 선택할 데이터의 양이 클 경우(25GB 이상) 여러 SELECT INTO OUTFILE S3 문을 사용하여 데이터를 Amazon S3에 저장하는 것이 좋습니다. 각 문은 저장할 데이터의 서로 다른 부분을 선택해야 하며, 데이터 파일을 저장할 때 사용할 s3-uri 파라미터에도 서로 다른 file_prefix를 지정해야 합니다. 여러 문을 사용하여 선택할 데이터를 분할하면 실행 오류 시 보다 쉽게 복구할 수 있습니다. 특정 문을 실행하는 동안 오류가 발생할 경우 해당 부분의 데이터만 다시 선택하여 Amazon S3에 업로드하면 되기 때문입니다. 여러 문을 사용할 경우 한 트랜잭션을 장시간 실행하지 않아도 되므로 성과를 개선할 수 있습니다.

  • s3-uri 파라미터에 동일한 file_prefix를 사용하는 여러 SELECT INTO OUTFILE S3 문이 동시에 실행되어 Amazon S3로 데이터를 선택할 경우 동작이 정의되지 않습니다.

  • 테이블 스키마 또는 파일 메타데이터와 같은 메타데이터는 Aurora가 Amazon S3로 업로드하지 않습니다.

  • 실패를 복구하는 경우와 같이 SELECT INTO OUTFILE S3 쿼리를 재실행하는 경우가 있을 수 있습니다. 이러한 경우 Amazon S3 버킷에서 s3-uri에 지정된 동일한 파일 접두사를 포함하는 기존의 데이터 파일을 모두 제거하거나 SELECT INTO OUTFILE S3 쿼리에서 OVERWRITE ON 을 포함해야 합니다.

SELECT INTO OUTFILE S3 문은 성공 또는 실패 시 일반적인 MySQL 오류 번호 및 응답을 반환합니다. MySQL 오류 번호 및 응답에 액세스할 수 없을 경우 완료 여부를 확인할 수 있는 가장 간단한 방법은 문에 MANIFEST ON을 지정하는 것입니다. 매니페스트 파일은 문이 기록하는 마지막 파일입니다. 즉, 매니페스트 파일이 만들어지면 문이 실행을 완료한 것입니다.

현재, SELECT INTO OUTFILE S3 문이 실행되는 동안 진행률을 직접 모니터링하는 방법은 없습니다. 하지만 이 문을 사용하여 Aurora에서 Amazon S3로 대량의 데이터를 기록할 때 문에서 선택된 데이터의 크기를 알고 있는 경우 Amazon S3에 만들어진 데이터 파일을 모니터링하여 진행률을 추정할 수 있습니다.

이때 문에서 선택된 데이터 6GB마다 데이터 파일이 하나씩 지정된 Amazon S3 버킷에 만들어진다는 점을 이용할 수 있습니다. 선택된 데이터 크기를 6GB로 나누어 만들어질 데이터 파일 수를 추측합니다. 그런 다음 문이 실행되는 동안 Amazon S3에 업로드된 파일 수를 모니터링하여 진행률을 추정할 수 있습니다.

예제

다음 문은 employees 테이블에서 모든 데이터를 선택하고 Aurora DB 클러스터와 다른 리전에 속한 Amazon S3 버킷에 데이터를 저장합니다. 이 문은 각 필드가 쉼표(,) 문자로 끝나고 각 줄이 줄바꿈(\n) 문자로 끝나는 데이터 파일을 만듭니다. 이 문은 sample_employee_data 파일 접두사와 일치하는 파일이 지정된 Amazon S3 버킷에 존재할 경우 오류를 반환합니다.

Copy
SELECT * FROM employees INTO OUTFILE S3 's3-us-west-2://aurora-select-into-s3-pdx/sample_employee_data' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

다음 문은 employees 테이블에서 모든 데이터를 선택하고 Aurora DB 클러스터와 같은 리전에 속한 Amazon S3 버킷에 데이터를 저장합니다. 이 문은 각 필드가 쉼표(,) 문자로 끝나고 각 줄이 줄바꿈(\n) 문자로 끝나는 데이터 파일을 만들고 매니페스트 파일도 만듭니다. 이 문은 sample_employee_data 파일 접두사와 일치하는 파일이 지정된 Amazon S3 버킷에 존재할 경우 오류를 반환합니다.

Copy
SELECT * FROM employees INTO OUTFILE S3 's3://aurora-select-into-s3-pdx/sample_employee_data' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' MANIFEST ON;

다음 문은 employees 테이블에서 모든 데이터를 선택하고 Aurora DB 클러스터와 다른 리전에 속한 Amazon S3 버킷에 데이터를 저장합니다. 이 문은 각 필드가 쉼표(,) 문자로 끝나고 각 줄이 줄바꿈(\n) 문자로 끝나는 데이터 파일을 만듭니다. 이 문은 지정된 Amazon S3 버킷에서 sample_employee_data 파일 접두사와 일치하는 기존 파일을 모두 덮어씁니다.

Copy
SELECT * FROM employees INTO OUTFILE S3 's3-us-west-2://aurora-select-into-s3-pdx/sample_employee_data' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' OVERWRITE ON;

다음 문은 employees 테이블에서 모든 데이터를 선택하고 Aurora DB 클러스터와 같은 리전에 속한 Amazon S3 버킷에 데이터를 저장합니다. 이 문은 각 필드가 쉼표(,) 문자로 끝나고 각 줄이 줄바꿈(\n) 문자로 끝나는 데이터 파일을 만들고 매니페스트 파일도 만듭니다. 이 문은 지정된 Amazon S3 버킷에서 sample_employee_data 파일 접두사와 일치하는 기존 파일을 모두 덮어씁니다.

Copy
SELECT * FROM employees INTO OUTFILE S3 's3://aurora-select-into-s3-pdx/sample_employee_data' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' MANIFEST ON OVERWRITE ON;

관련 주제