

# Amazon S3 버킷의 텍스트 파일에서 Amazon Aurora MySQL DB 클러스터로 데이터 로드
<a name="AuroraMySQL.Integrating.LoadFromS3"></a><a name="load_from_s3"></a><a name="load_data"></a><a name="load_xml"></a>

`LOAD DATA FROM S3` 또는 `LOAD XML FROM S3` 문을 사용하여 Amazon S3 버킷에 저장된 파일에서 데이터를 로드할 수 있습니다. Aurora MySQL에서는 먼저 파일을 로컬 디스크에 저장한 다음 데이터베이스로 가져옵니다. 데이터베이스로 가져오기가 완료되면 로컬 파일은 삭제됩니다.

**참고**  
Aurora Serverless v1에서는 데이터를 텍스트 테이블로 로드할 수 없습니다. Aurora Serverless v2에서는 지원됩니다.

**Contents**
+ [Aurora에 Amazon S3에 대한 액세스 권한 부여](#AuroraMySQL.Integrating.LoadFromS3.Authorize)
+ [Amazon Aurora MySQL에서 데이터 로드 권한 부여](#AuroraMySQL.Integrating.LoadFromS3.Grant)
+ [Amazon S3 버킷으로의 경로(URI) 지정](#AuroraMySQL.Integrating.LoadFromS3.URI)
+ [S3에서 데이터 로드](#AuroraMySQL.Integrating.LoadFromS3.Text)
  + [구문](#AuroraMySQL.Integrating.LoadFromS3.Text.Syntax)
  + [파라미터](#AuroraMySQL.Integrating.LoadFromS3.Text.Parameters)
  + [매니페스트 파일을 이용해 로드할 데이터 파일 지정](#AuroraMySQL.Integrating.LoadFromS3.Manifest)
    + [aurora\$1s3\$1load\$1history 테이블을 이용해 로드 파일 확인](#AuroraMySQL.Integrating.LoadFromS3.Manifest.History)
  + [예제](#AuroraMySQL.Integrating.LoadFromS3.Text.Examples)
+ [S3에서 XML 로드](#AuroraMySQL.Integrating.LoadFromS3.XML)
  + [구문](#AuroraMySQL.Integrating.LoadFromS3.XML.Syntax)
  + [파라미터](#AuroraMySQL.Integrating.LoadFromS3.XML.Parameters)

## Aurora에 Amazon S3에 대한 액세스 권한 부여
<a name="AuroraMySQL.Integrating.LoadFromS3.Authorize"></a>

Amazon S3 버킷에서 데이터를 로드하기 전에 Aurora MySQL DB 클러스터에 Amazon S3에 액세스할 권한을 부여해야 합니다.

**Aurora MySQL에 Amazon S3에 대한 액세스 권한을 부여하려면**

1. Aurora MySQL DB 클러스터에서 Amazon S3에 액세스하도록 허용하는 버킷 및 객체 권한을 제공하는 AWS Identity and Access Management (IAM) 정책을 생성하세요. 지침은 [Amazon S3 리소스에 액세스할 수 있는 IAM 정책 생성](AuroraMySQL.Integrating.Authorizing.IAM.S3CreatePolicy.md) 섹션을 참조하세요.
**참고**  
Aurora MySQL 버전 3.05 이상에서는 고객 관리형 AWS KMS keys를 사용하여 암호화된 객체를 로드할 수 있습니다. 이렇게 하려면 IAM 정책에 `kms:Decrypt` 권한을 포함하세요. 자세한 내용은 [AWS KMS 리소스에 액세스할 수 있는 IAM 정책 생성](AuroraMySQL.Integrating.Authorizing.IAM.KMSCreatePolicy.md) 섹션을 참조하세요.  
AWS 관리형 키 또는 Amazon S3 관리형 키(SSE-S3)를 사용하여 암호화된 객체를 로드하는 경우 이 권한이 필요하지 않습니다.

1. IAM 역할을 생성하고 [Amazon S3 리소스에 액세스할 수 있는 IAM 정책 생성](AuroraMySQL.Integrating.Authorizing.IAM.S3CreatePolicy.md)에서 생성한 IAM 정책을 새 IAM 역할에 연결하십시오. 지침은 [Amazon Aurora에서 AWS 서비스에 액세스하도록 허용하는 IAM 역할 생성](AuroraMySQL.Integrating.Authorizing.IAM.CreateRole.md) 섹션을 참조하세요.

1. DB 클러스터에서 사용자 지정 DB 클러스터 파라미터 그룹을 사용 중인지 확인하십시오.

   사용자 지정 DB 클러스터 파라미터 그룹 생성에 대한 자세한 내용은 [Amazon Aurora에서 DB 클러스터 파라미터 그룹 생성](USER_WorkingWithParamGroups.CreatingCluster.md) 단원을 참조하십시오.

1. Aurora MySQL 버전 2에서는 `aurora_load_from_s3_role`이나 `aws_default_s3_role` DB 클러스터 파라미터를 새 IAM 역할의 Amazon 리소스 이름(ARN)으로 설정합니다. `aurora_load_from_s3_role`에 대해 지정된 IAM 역할이 없는 경우, Aurora는 `aws_default_s3_role`에 지정된 IAM 역할을 사용합니다.

   Aurora MySQL 버전 3에서는 `aws_default_s3_role`을 사용하면 됩니다.

   클러스터가 Aurora Global Database의 일부로 포함되는 경우 이 글로벌 데이터베이스의 각 Aurora 클러스터에 대해 이 파라미터를 설정합니다. Aurora Global Database의 기본 클러스터만 데이터를 로드할 수 있더라도 다른 클러스터가 장애 조치 메커니즘에 의해 승격되어 기본 클러스터가 될 수 있습니다.

   DB 클러스터 파라미터에 대한 자세한 내용은 [Amazon Aurora DB 클러스터와 DB 인스턴스 파라미터](USER_WorkingWithDBClusterParamGroups.md#Aurora.Managing.ParameterGroups) 단원을 참조하십시오.

1. Aurora MySQL DB 클러스터의 데이터베이스 사용자가 Amazon S3에 액세스하도록 허용하려면 [Amazon Aurora에서 AWS 서비스에 액세스하도록 허용하는 IAM 역할 생성](AuroraMySQL.Integrating.Authorizing.IAM.CreateRole.md)에서 생성한 역할을 해당 DB 클러스터와 연결하십시오. Aurora Global Database의 경우 글로벌 데이터베이스의 각 Aurora 클러스터와 해당 역할을 연결합니다. IAM 역할과 DB 클러스터 연결에 대한 자세한 내용은 [IAM 역할을 Amazon Aurora MySQL DB 클러스터와 연결](AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.md) 단원을 참조하십시오.

1. Amazon S3으로의 아웃바운드 연결을 허용하도록 Aurora MySQL DB 클러스터를 구성하십시오. 지침은 [Amazon Aurora에서 다른 AWS 서비스로의 네트워크 통신 활성화](AuroraMySQL.Integrating.Authorizing.Network.md) 섹션을 참조하세요.

    DB 클러스터가 퍼블릭 액세스 상태가 아니며 VPC 퍼블릭 서브넷에 있다면, 프라이빗 상태입니다. S3 게이트웨이 엔드포인트를 생성하여 S3 버킷에 액세스할 수 있습니다. 자세한 내용은 [Amazon S3용 게이트웨이 엔드포인트](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html)를 참조하세요.

    Aurora Global Database의 경우 글로벌 데이터베이스의 각 Aurora 클러스터에 대해 발신 연결을 활성화합니다.

## Amazon Aurora MySQL에서 데이터 로드 권한 부여
<a name="AuroraMySQL.Integrating.LoadFromS3.Grant"></a>

`LOAD DATA FROM S3` 또는 `LOAD XML FROM S3` 문을 실행하는 데이터베이스 사용자에게는 둘 중 한 명령문을 실행할 수 있도록 특별한 역할이나 권한이 부여되어야 합니다. Aurora MySQL 버전 3에서는 `AWS_LOAD_S3_ACCESS` 역할을 부여합니다. Aurora MySQL 버전 2에서는 `LOAD FROM S3` 권한을 부여합니다. DB 클러스터의 관리자 사용자에게는 기본적으로 적절한 역할이나 권한이 부여됩니다. 다음 명령문 중 하나를 사용하여 다른 사용자에게 권한을 부여할 수 있습니다.

 Aurora MySQL 버전 3에 대해 다음 명령문을 사용합니다.

```
GRANT AWS_LOAD_S3_ACCESS TO 'user'@'domain-or-ip-address'
```

**작은 정보**  
Aurora MySQL 버전 3에서 역할을 사용하는 경우 `SET ROLE role_name` 또는 `SET ROLE ALL` 문을 사용하여 해당 역할을 활성화할 수도 있습니다. MySQL 8.0 역할 시스템에 익숙하지 않을 경우 [역할 기반 권한 모델](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model)에서 자세한 내용을 확인할 수 있습니다. 자세한 내용은 **MySQL 참조 설명서의 [역할 사용](https://dev.mysql.com/doc/refman/8.0/en/roles.html)을 참조하세요.  
이는 현재 활성 세션에만 적용됩니다. 다시 연결할 때 권한을 부여하려면 `SET ROLE` 문을 다시 실행해야 합니다. 자세한 내용은 **MySQL 참조 매뉴얼의 [SET ROLE 문](https://dev.mysql.com/doc/refman/8.0/en/set-role.html)을 참조하세요.  
`activate_all_roles_on_login` DB 클러스터 파라미터로 사용자가 DB 인스턴스에 연결할 때 모든 역할을 자동으로 활성화할 수 있습니다. 이 파라미터를 설정하면 역할을 활성화하는 데 `SET ROLE` 문을 명시적으로 직접 호출할 필요가 없습니다. 자세한 내용은 *MySQL Reference Manual*(MySQL 참조 매뉴얼)의 [activate\$1all\$1roles\$1on\$1login](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_activate_all_roles_on_login)을 참조하세요.  
하지만 다른 사용자가 저장 프로시저를 직접 호출한 경우에는 저장 프로시저를 시작할 때 명시적으로 `SET ROLE ALL`을 직접 호출하여 역할을 활성화해야 합니다.

Aurora MySQL 버전 2에 대해 다음 문을 사용합니다.

```
GRANT LOAD FROM S3 ON *.* TO 'user'@'domain-or-ip-address'
```

`AWS_LOAD_S3_ACCESS` 역할 및 `LOAD FROM S3` 권한은 Amazon Aurora에만 적용되며, 외부 MySQL 데이터베이스 또는 RDS for MySQL DB 인스턴스에서는 사용할 수 없습니다. 복제 소스인 Aurora DB 클러스터와 복제 클라이언트인 MySQL 데이터베이스 간에 복제를 설정한 경우, 역할 또는 권한에 대한 `GRANT` 문으로 인해 오류가 생겨 복제가 중단됩니다. 오류를 건너뛰고 복제를 계속 진행하셔도 됩니다. RDS for MySQL 인스턴스에서 오류를 건너뛰려면 [mysql\$1rds\$1skip\$1repl\$1error](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql_rds_skip_repl_error.html) 프로시저를 사용하세요. 외부 MySQL 데이터베이스에서 오류를 건너뛰려면 [slave\$1skip\$1errors](https://dev.mysql.com/doc/refman/5.7/en/replication-options-replica.html#sysvar_slave_skip_errors) 시스템 변수(Aurora MySQL 버전 2) 또는 [replica\$1skip\$1errors](https://dev.mysql.com/doc/refman/8.0/en/replication-options-replica.html#sysvar_replica_skip_errors) 시스템 변수(Aurora MySQL 버전 3)를 사용하세요.

**참고**  
데이터베이스 사용자는 데이터를 로드하는 데이터베이스에 대해 `INSERT` 권한을 보유하고 있어야 합니다.

## Amazon S3 버킷으로의 경로(URI) 지정
<a name="AuroraMySQL.Integrating.LoadFromS3.URI"></a>

Amazon S3 버킷에 저장된 파일로의 경로(URI)를 지정하는 구문은 다음과 같습니다.

```
s3-region://amzn-s3-demo-bucket/file-name-or-prefix
```

경로에는 다음 값이 포함됩니다.
+ `region`(선택 사항) – 데이터를 로드할 Amazon S3 버킷이 포함된 AWS 리전입니다. 이 값은 선택 사항입니다. `region` 값을 지정하지 않으면 Aurora은 DB 클러스터와 동일한 리전에 있는 Amazon S3에서 파일을 로드합니다.
+ `bucket-name` – 로드할 데이터가 포함된 Amazon S3 버킷의 이름입니다. 가상 폴더 경로를 식별하는 객체 접두사가 지원됩니다.
+ `file-name-or-prefix` – Amazon S3 텍스트 파일 또는 XML 파일의 이름, 또는 로드할 하나 이상의 테스트 또는 XML 파일을 식별하는 접두사입니다. 로드할 하나 이상의 텍스트 파일을 식별하는 매니페스트 파일을 지정할 수도 있습니다. Amazon S3에서 텍스트 파일을 로드하기 위해 매니페스트 파일을 사용하는 방법에 대한 자세한 내용은 [매니페스트 파일을 이용해 로드할 데이터 파일 지정](#AuroraMySQL.Integrating.LoadFromS3.Manifest) 단원을 참조하십시오.

**S3 버킷에 있는 파일의 URI를 복사하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 탐색 창에서 **버킷**을 선택한 다음, 복사하려는 URI가 있는 버킷을 선택합니다.

1. S3에서 로드하려는 접두사 또는 파일을 선택합니다.

1. **S3 URI 복사**를 선택합니다.

## S3에서 데이터 로드
<a name="AuroraMySQL.Integrating.LoadFromS3.Text"></a>

`LOAD DATA FROM S3` 문을 사용하여 쉼표로 구분되는 텍스트 데이터와 같이 MySQL [LOAD DATA INFILE](https://dev.mysql.com/doc/refman/8.0/en/load-data.html) 문에서 지원하는 모든 텍스트 파일 형식의 데이터를 로드할 수 있습니다. 압축 파일은 지원되지 않습니다.

**참고**  
Aurora MySQL DB 클러스터에서 S3에 대한 아웃바운드 연결을 허용하는지 확인하세요. 자세한 내용은 [Amazon Aurora에서 다른 AWS 서비스로의 네트워크 통신 활성화](AuroraMySQL.Integrating.Authorizing.Network.md) 섹션을 참조하세요.

### 구문
<a name="AuroraMySQL.Integrating.LoadFromS3.Text.Syntax"></a>

```
LOAD DATA [FROM] S3 [FILE | PREFIX | MANIFEST] 'S3-URI'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [PARTITION (partition_name,...)]
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number {LINES | ROWS}]
    [(col_name_or_user_var,...)]
    [SET col_name = expr,...]
```

**참고**  
Aurora MySQL 버전 3.05 이상에서는 키워드 `FROM`이 선택 사항입니다.

### 파라미터
<a name="AuroraMySQL.Integrating.LoadFromS3.Text.Parameters"></a>

`LOAD DATA FROM S3` 문은 다음과 같은 필수 파라미터와 선택 사항인 파라미터를 사용합니다. MySQL 설명서의 [LOAD DATA 문](https://dev.mysql.com/doc/refman/8.0/en/load-data.html)에서 이러한 파라미터에 대한 자세한 내용을 볼 수 있습니다.

**FILE \$1 PREFIX \$1 MANIFEST**  
단일 파일에서 데이터를 로드할지, 지정된 접두사와 일치하는 모든 파일에서 데이터를 로드할지, 지정된 메니페스트의 모든 파일에서 데이터를 로드할지를 식별합니다. `FILE`은 기본값입니다.

**S3-URI**  
로드할 텍스트나 메니페스트 파일의 URI를 지정하거나 사용할 Amazon S3 접두사를 지정합니다. [Amazon S3 버킷으로의 경로(URI) 지정](#AuroraMySQL.Integrating.LoadFromS3.URI)에서 설명하는 구문을 사용하여 URI를 지정합니다.

**REPLACE \$1 IGNORE**  
입력 행이 데이터베이스 테이블의 기존 행과 고유 키 값이 동일한 경우 수행할 작업을 결정합니다.  
+ 입력 행이 테이블의 기존 행을 대체하도록 하려면 `REPLACE`를 지정합니다.
+ 입력 행을 무시하려면 `IGNORE`를 지정합니다.

**INTO TABLE**  
입력 행을 로드할 데이터베이스 테이블의 이름을 식별합니다.

**PARTITION**  
모든 입력 행을 쉼표로 구분된 지정된 파티션 이름 목록으로 식별되는 파티션으로 삽입해야 합니다. 입력 행을 지정된 파티션에 삽입할 수 없는 경우 문이 실패하며 오류가 반환됩니다.

**CHARACTER SET**  
입력 파일의 데이터 문자 집합을 식별합니다.

**FIELDS \$1 COLUMNS**  
입력 파일의 필드 또는 열을 구분하는 방법을 식별합니다. 필드는 기본적으로 탭으로 구분됩니다.

**LINES**  
입력 파일의 줄을 구분하는 방법을 식별합니다. 줄은 기본적으로 줄 바꿈 문자(`'\n'`)로 구분됩니다.

**IGNORE *number* LINES \$1 ROWS**  
입력 파일의 시작 부분에서 특정 줄 또는 행 수를 무시하도록 지정합니다. 예를 들어, `IGNORE 1 LINES`를 사용하여 열 이름이 포함된 첫 헤더 줄을 건너뛰거나 `IGNORE 2 ROWS`를 사용하여 입력 파일의 첫 두 데이터 행을 건너뛸 수 있습니다. `PREFIX`를 사용하는 경우 `IGNORE`는 첫 번째 입력 파일의 시작 부분에서 특정 개수의 행이나 줄을 건너뜁니다.

**col\$1name\$1or\$1user\$1var, ...**  
로드할 열을 이름을 기준으로 식별하는 사용자 변수 목록 또는 쉼표로 구분된 하나 이상의 열 이름 목록을 지정합니다. 이 목적에 사용되는 사용자 변수의 이름은 @로 시작하는 텍스트 파일의 요소 이름과 일치해야 합니다. 사용자 변수를 사용하여 추후 재사용을 위해 해당 필드 값을 저장할 수 있습니다.  
예를 들어, 다음 문은 입력 파일의 첫 번째 열을 `table1`의 첫 번째 열로 로드하고, `table_column2`에 있는 `table1` 열의 값을 100으로 나눈 두 번째 열의 입력 값으로 설정합니다.  

```
LOAD DATA FROM S3 's3://amzn-s3-demo-bucket/data.txt'
    INTO TABLE table1
    (column1, @var1)
    SET table_column2 = @var1/100;
```

**SET**  
테이블의 열 값을 입력 파일에 포함되지 않은 값으로 설정하는 쉼표로 구분된 할당 작업 목록을 지정합니다.  
예를 들어, 다음 문은 `table1`의 첫 두 열을 입력 파일의 첫 두 열의 값으로 설정한 다음, `column3`에 있는 `table1`의 값을 현재 타임스탬프로 설정합니다.  

```
LOAD DATA FROM S3  's3://amzn-s3-demo-bucket/data.txt'
    INTO TABLE table1
    (column1, column2)
    SET column3 = CURRENT_TIMESTAMP;
```
`SET` 할당의 오른쪽에서 하위 쿼리를 사용할 수 있습니다. 열에 할당될 값을 반환하는 하위 쿼리의 경우, 스칼라 하위 쿼리만 사용할 수 있습니다. 또한 로드 중인 테이블에서 선택할 때는 하위 쿼리를 사용할 수 없습니다.

Amazon S3 버킷에서 데이터를 로드 중인 경우 `LOAD DATA FROM S3` 문의 `LOCAL` 키워드를 사용할 수 없습니다.

### 매니페스트 파일을 이용해 로드할 데이터 파일 지정
<a name="AuroraMySQL.Integrating.LoadFromS3.Manifest"></a>

`LOAD DATA FROM S3` 문과 `MANIFEST` 키워드를 사용하여 DB 클러스터에 있는 테이블에 로드할 텍스트 파일 목록을 표시하는 JSON 형식의 메니페스트 파일을 지정할 수 있습니다.

다음 JSON 스키마는 매니페스트 파일의 형식 및 내용을 설명합니다.

```
{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "additionalProperties": false,
    "definitions": {},
    "id": "Aurora_LoadFromS3_Manifest",
    "properties": {
        "entries": {
            "additionalItems": false,
            "id": "/properties/entries",
            "items": {
                "additionalProperties": false,
                "id": "/properties/entries/items",
                "properties": {
                    "mandatory": {
                        "default": "false",
                        "id": "/properties/entries/items/properties/mandatory",
                        "type": "boolean"
                    },
                    "url": {
                        "id": "/properties/entries/items/properties/url",
                        "maxLength": 1024,
                        "minLength": 1,
                        "type": "string"
                    }
                },
                "required": [
                    "url"
                ],
                "type": "object"
            },
            "type": "array",
            "uniqueItems": true
        }
    },
    "required": [
        "entries"
    ],
    "type": "object"
}
```

메니페스트의 각 `url`에는 접두사뿐 아니라 파일의 버킷 이름과 전체 객체 경로를 포함한 URL을 지정해야 합니다. 메니페스트를 이용하면 다른 버킷, 다른 리전이나 접두사가 다른 파일에서 파일을 불러올 수 있습니다. URL에서 리전이 지정되지 않았다면, 대상 Aurora DB 클러스터의 리전을 사용합니다. 다음은 다른 버킷에서 파일 4개를 로드하는 메니페스트 파일 예제입니다.

```
{
  "entries": [
    {
      "url":"s3://aurora-bucket/2013-10-04-customerdata", 
      "mandatory":true
    },
    {
      "url":"s3-us-west-2://aurora-bucket-usw2/2013-10-05-customerdata",
      "mandatory":true
    },
    {
      "url":"s3://aurora-bucket/2013-10-04-customerdata", 
      "mandatory":false
    },
    {
      "url":"s3://aurora-bucket/2013-10-05-customerdata"
    }
  ]
}
```

선택 사항인 `mandatory` 플래그는 파일이 없을 때 `LOAD DATA FROM S3`의 오류 반환 여부를 결정합니다. `mandatory` 플래그의 기본값은 `false`입니다. `mandatory` 설정 여부와 상관없이, 파일이 발견되지 않으면 `LOAD DATA FROM S3`은 종료됩니다.

메니페스트 파일은 확장자를 제한하지 않습니다. 다음은 앞 예제에서 사용한 `LOAD DATA FROM S3` 매니페스트를 이용해 **customer.manifest** 문을 실행하는 예제입니다.

```
LOAD DATA FROM S3 MANIFEST 's3-us-west-2://aurora-bucket/customer.manifest'
    INTO TABLE CUSTOMER
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
    (ID, FIRSTNAME, LASTNAME, EMAIL);
```

문이 완료되면 성공적으로 로드한 각 파일이 `aurora_s3_load_history`에 기록됩니다.

#### aurora\$1s3\$1load\$1history 테이블을 이용해 로드 파일 확인
<a name="AuroraMySQL.Integrating.LoadFromS3.Manifest.History"></a>

`LOAD DATA FROM S3` 문이 완료될 때마다 `aurora_s3_load_history` 스키마에 있는 `mysql` 테이블에 각 로드 파일 항목이 업데이트됩니다.

`LOAD DATA FROM S3` 문을 실행하면, `aurora_s3_load_history` 테이블을 쿼리해 로드한 파일을 확인할 수 있습니다. 이 문을 한 번 반복하여 로드한 파일을 확인하려면 `WHERE` 절을 사용하여 Amazon S3 URI의 기록에서 문에 사용된 매니페스트 파일을 필터링합니다. 이전에 같은 메니페스트 파일을 사용한 적이 있다면, `timestamp` 필드로 결과를 필터링하십시오.

```
select * from mysql.aurora_s3_load_history where load_prefix = 'S3_URI';
```

다음 표는 `aurora_s3_load_history` 테이블 필드를 설명합니다.


| 필드 | 설명 | 
| --- | --- | 
| `load_prefix` |  로드 문에 지정된 URI입니다. 이 URI는 다음에 매핑할 수 있습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.LoadFromS3.html)  | 
|  `file_name`  |  Amazon S3에서 Aurora로 로드한 파일 이름으로, `load_prefix` 필드에서 확인한 URI를 사용합니다.  | 
| `version_number` |  Amazon S3 버킷에 버전 번호가 있는 경우 로드한 `file_name` 필드로 확인한 파일 버전 번호입니다.  | 
|  `bytes_loaded`  |  로드한 파일의 크기(바이트)입니다.  | 
| `load_timestamp`  |  `LOAD DATA FROM S3` 문이 완료된 시점의 타임스탬프입니다.  | 

### 예제
<a name="AuroraMySQL.Integrating.LoadFromS3.Text.Examples"></a>

다음 문은 Aurora DB 클러스터와 동일한 리전에 있는 Amazon S3 버킷에서 데이터를 로드합니다. 이 문은 *amzn-s3-demo-bucket* Amazon S3 버킷에 있는 파일 `customerdata.txt`에서 쉼표로 구분된 데이터를 읽은 다음 `store-schema.customer-table` 표로 해당 데이터를 로드합니다.

```
LOAD DATA FROM S3 's3://amzn-s3-demo-bucket/customerdata.csv' 
    INTO TABLE store-schema.customer-table
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
    (ID, FIRSTNAME, LASTNAME, ADDRESS, EMAIL, PHONE);
```

다음 문은 Aurora DB 클러스터와 다른 리전에 있는 Amazon S3 버킷에서 데이터를 로드합니다. 이 문은 `us-west-2` 리전에 있는 *amzn-s3-demo-bucket* Amazon S3 버킷의 `employee-data` 객체 접두사와 일치하는 모든 파일에서 쉼표로 구분된 데이터를 읽은 다음 `employees` 표로 해당 데이터를 로드합니다.

```
LOAD DATA FROM S3 PREFIX 's3-us-west-2://amzn-s3-demo-bucket/employee_data'
    INTO TABLE employees
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
    (ID, FIRSTNAME, LASTNAME, EMAIL, SALARY);
```

다음 문은 q1\$1sales.json이라는 JSON 메니페스트 파일에서 지정한 파일의 데이터를 `sales` 테이블로 로드합니다.

```
LOAD DATA FROM S3 MANIFEST 's3-us-west-2://amzn-s3-demo-bucket1/q1_sales.json'
    INTO TABLE sales
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
    (MONTH, STORE, GROSS, NET);
```

## S3에서 XML 로드
<a name="AuroraMySQL.Integrating.LoadFromS3.XML"></a>

`LOAD XML FROM S3` 문을 사용하여 Amazon S3 버킷에 저장된 XML 파일에서 다음과 같은 세 가지 XML 형식 중 하나로 데이터를 로드할 수 있습니다.
+ 열 이름이 `<row>` 요소의 속성입니다. 이 속성 값은 테이블 필드의 콘텐츠를 식별합니다.

  ```
  <row column1="value1" column2="value2" .../>
  ```
+ 열 이름이 `<row>` 요소의 하위 요소입니다. 이 하위 요소의 값은 테이블 필드의 콘텐츠를 식별합니다.

  ```
  <row>
    <column1>value1</column1>
    <column2>value2</column2>
  </row>
  ```
+ 열 이름이 `name` 요소의 `<field>` 요소의 `<row>` 속성에 있습니다. 이 `<field>` 요소의 값은 테이블 필드의 콘텐츠를 식별합니다.

  ```
  <row>
    <field name='column1'>value1</field>
    <field name='column2'>value2</field>
  </row>
  ```

### 구문
<a name="AuroraMySQL.Integrating.LoadFromS3.XML.Syntax"></a>

```
LOAD XML FROM S3 'S3-URI'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [PARTITION (partition_name,...)]
    [CHARACTER SET charset_name]
    [ROWS IDENTIFIED BY '<element-name>']
    [IGNORE number {LINES | ROWS}]
    [(field_name_or_user_var,...)]
    [SET col_name = expr,...]
```

### 파라미터
<a name="AuroraMySQL.Integrating.LoadFromS3.XML.Parameters"></a>

`LOAD XML FROM S3` 문은 다음과 같은 필수 파라미터와 선택 사항인 파라미터를 사용합니다. MySQL 설명서의 [LOAD XML 문](https://dev.mysql.com/doc/refman/8.0/en/load-xml.html)에서 이러한 파라미터에 대한 자세한 내용을 볼 수 있습니다.

**FILE \$1 PREFIX**  
단일 파일에서 데이터를 로드할지, 지정된 접두사와 일치하는 모든 파일에서 데이터를 로드할지 식별합니다. `FILE`은 기본값입니다.

**REPLACE \$1 IGNORE**  
입력 행이 데이터베이스 테이블의 기존 행과 고유 키 값이 동일한 경우 수행할 작업을 결정합니다.  
+ 입력 행이 테이블의 기존 행을 대체하도록 하려면 `REPLACE`를 지정합니다.
+ 입력 행을 무시하려는 경우 `IGNORE`를 지정하십시오. `IGNORE`는 기본값입니다.

**INTO TABLE**  
입력 행을 로드할 데이터베이스 테이블의 이름을 식별합니다.

**PARTITION**  
모든 입력 행을 쉼표로 구분된 지정된 파티션 이름 목록으로 식별되는 파티션으로 삽입해야 합니다. 입력 행을 지정된 파티션에 삽입할 수 없는 경우 문이 실패하며 오류가 반환됩니다.

**CHARACTER SET**  
입력 파일의 데이터 문자 집합을 식별합니다.

**ROWS IDENTIFIED BY**  
입력 파일의 행을 식별하는 요소 이름을 식별합니다. 기본값은 `<row>`입니다.

**IGNORE *number* LINES \$1 ROWS**  
입력 파일의 시작 부분에서 특정 줄 또는 행 수를 무시하도록 지정합니다. 예를 들어, `IGNORE 1 LINES`를 사용하여 텍스트 파일의 첫 번째 줄을 건너뛰거나 `IGNORE 2 ROWS`를 사용하여 입력 XML의 첫 두 데이터 행을 건너뛸 수 있습니다.

**field\$1name\$1or\$1user\$1var, ...**  
로드할 요소를 이름을 기준으로 식별하는 사용자 변수 목록 또는 쉼표로 구분된 하나 이상의 XML 요소 이름 목록을 지정합니다. 이 목적에 사용되는 사용자 변수의 이름은 @로 시작하는 XML 파일의 요소 이름과 일치해야 합니다. 사용자 변수를 사용하여 추후 재사용을 위해 해당 필드 값을 저장할 수 있습니다.  
예를 들어, 다음 문은 입력 파일의 첫 번째 열을 `table1`의 첫 번째 열로 로드하고, `table_column2`에 있는 `table1` 열의 값을 100으로 나눈 두 번째 열의 입력 값으로 설정합니다.  

```
LOAD XML FROM S3 's3://amzn-s3-demo-bucket/data.xml'
   INTO TABLE table1
   (column1, @var1)
   SET table_column2 = @var1/100;
```

**SET**  
테이블의 열 값을 입력 파일에 포함되지 않은 값으로 설정하는 쉼표로 구분된 할당 작업 목록을 지정합니다.  
예를 들어, 다음 문은 `table1`의 첫 두 열을 입력 파일의 첫 두 열의 값으로 설정한 다음, `column3`에 있는 `table1`의 값을 현재 타임스탬프로 설정합니다.  

```
LOAD XML FROM S3 's3://amzn-s3-demo-bucket/data.xml'
   INTO TABLE table1
   (column1, column2)
   SET column3 = CURRENT_TIMESTAMP;
```
`SET` 할당의 오른쪽에서 하위 쿼리를 사용할 수 있습니다. 열에 할당될 값을 반환하는 하위 쿼리의 경우, 스칼라 하위 쿼리만 사용할 수 있습니다. 또한 로드 중인 테이블에서 선택할 때는 하위 쿼리를 사용할 수 없습니다.