

# 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**
+ [Amazon S3 へのアクセスを Aurora に許可する](#AuroraMySQL.Integrating.LoadFromS3.Authorize)
+ [Amazon Aurora MySQL でデータをロードするための権限の付与](#AuroraMySQL.Integrating.LoadFromS3.Grant)
+ [Amazon S3 バケットへのパス (URI) の指定](#AuroraMySQL.Integrating.LoadFromS3.URI)
+ [LOAD DATA FROM 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)
+ [LOAD XML FROM S3](#AuroraMySQL.Integrating.LoadFromS3.XML)
  + [構文](#AuroraMySQL.Integrating.LoadFromS3.XML.Syntax)
  + [パラメータ](#AuroraMySQL.Integrating.LoadFromS3.XML.Parameters)

## Amazon S3 へのアクセスを Aurora に許可する
<a name="AuroraMySQL.Integrating.LoadFromS3.Authorize"></a>

Amazon S3 バケットからデータをロードする前に、まず Amazon S3 へのアクセス権限を Aurora MySQL DB クラスターに付与する必要があります。

**Amazon S3 へのアクセス権限を Aurora MySQL に付与するには**

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) に設定します。IAM ロールが `aurora_load_from_s3_role` に指定されていない場合、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 クラスターごとにロールを関連付けます。DB クラスターへの IAM ロールの関連付けの詳細については、「[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 リファレンスマニュアル」の「[Using roles](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)」を参照してください。  
ユーザーが DB インスタンスに接続したときに、`activate_all_roles_on_login` DB クラスターパラメータを使用して、すべてのロールを自動的に有効化できます。このパラメータを設定すると、通常、`SET ROLE` ステートメントを明示的に呼び出してロールをアクティブ化する必要はありません。詳細については、*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 バケットに保存されているファイルへのパスを指定する構文は次のとおりです。

```
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 ファイルの名前、あるいはロードする 1 つ以上のテキストファイルまたは XML ファイルを識別するプレフィックス。ロードするテキストファイルを識別するマニフェストファイルを指定することもできます。マニフェストファイルを使用して Amazon S3 からテキストファイルをロードする方法の詳細については、「[マニフェストを使用して、ロードするデータファイルを指定する](#AuroraMySQL.Integrating.LoadFromS3.Manifest)」を参照してください。

**S3 バケット内のファイルの URI をコピーするには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. ナビゲーションペインで **[バケット]** を選択し、URI をコピーするバケットを選択します。

1. S3 からロードするプレフィックスまたはファイルを選択します。

1. **[S3 URI をコピー]** を選択します。

## LOAD DATA FROM 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 XML Statement](https://dev.mysql.com/doc/refman/8.0/en/load-data.html)」(LOAD DATA ステートメント) を参照してください。

**ファイル \$1 プレフィックス \$1 マニフェスト**  
データを読み取るのが、1 つのファイルからか、特定のプレフィックスに一致するすべてのファイルからか、指定されたマニフェスト内のすべてのファイルからかを指定します。デフォルトは `FILE` です。

**S3-URI**  
ロードするテキストファイルまたはマニフェストファイルの URI、または、使用する Amazon S3 プレフィックスを指定します。「[Amazon S3 バケットへのパス (URI) の指定](#AuroraMySQL.Integrating.LoadFromS3.URI)」で説明されている構文を使用して URI を指定します。

**置換 \$1 無視**  
入力行とデータベーステーブルの既存の行で一意のキー値が同じである場合、どのアクションを実行するかを決定します。  
+ テーブル内の既存の行を入力行で置き換える場合は、`REPLACE` を指定します。
+ 入力行を破棄する場合は、`IGNORE` を指定します。

**テーブルに**  
入力行をロードする先のデータベーステーブルの名前を指定します。

**PARTITION**  
すべての入力行を、指定されたカンマ区切りのパーティション名のリストに記載されているパーティション内に挿入することを要求します。指定されたパーティションのいずれかに入力行を挿入できない場合、ステートメントは失敗し、エラーが返されます。

**文字セット**  
入力ファイルのデータの文字セットを指定します。

**フィールド \$1 列**  
入力ファイルのフィールドまたは列を区切る方法を指定します。デフォルトでは、フィールドはタブで区切られます。

**LINES**  
入力ファイルの行を区切る方法を指定します。デフォルトでは、行は改行文字 (`'\n'`) で区切られます。

***number* 行を無視 \$1 行**  
入力ファイルの先頭の特定の数の行または列を無視することを指定します。例えば、`IGNORE 1 LINES` では列名を含む初期のヘッダー行がスキップされます。`IGNORE 2 ROWS` では、入力ファイルの先頭から 2 行のデータがスキップされます。また、`PREFIX` を使用すると、`IGNORE` は初期の入力ファイルの先頭にある特定の行数または行をスキップします。

**col\$1name\$1or\$1user\$1var, ..。**  
1 つ以上の列名、またはロードする列を名前で指定するユーザー変数のカンマ区切りのリストを指定します。この目的で使用されるユーザー可変の名前は、プレフィックスを @ とするテキストファイルの要素名と一致する必要があります。フィールド値を対応するユーザー可変に保存して後で再利用できます。  
例えば、次のステートメントでは、入力ファイルの初期の列を `table1` の初期の列内にロードし、さらに `table_column2` の `table1` 列の値として、2 列目の入力値を 100 で割った値を設定します。  

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

**SET**  
テーブル内の列の値を入力ファイルに含まれていない値に設定する代入操作のカンマ区切りのリストを指定します。  
例えば、次のステートメントは `table1` の初期の 2 列を入力ファイルの初期の 2 列の値に設定し、さらに `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` キーワードで、JSON 形式のマニフェストファイルを指定して、DB クラスターのテーブルにロードするテキストファイルをリストできます。

次の 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` テーブルをクエリすることで、どのファイルがロードされたかを確認できます。ステートメントの 1 回のイテレーションからロードされたファイルを確認するには、`WHERE` 句を使用して Amazon S3 URI のレコードをフィルタリングし、ステートメントで使用されたマニフェストファイルを見つけます。以前に同じマニフェストファイルを使用した場合は、`timestamp` フィールドを使用して結果をフィルタリングします。

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

以下の表では、`aurora_s3_load_history` テーブルのフィールドについて説明しています。


| フィールド | 説明 | 
| --- | --- | 
| `load_prefix` |  load ステートメントで指定した URI。この URI は、次のいずれかにマッピングできます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.LoadFromS3.html)  | 
|  `file_name`  |  `load_prefix` フィールドで指定した URI を使用して Amazon S3 から Aurora にロードされたファイルの名前。  | 
| `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);
```

## LOAD XML FROM S3
<a name="AuroraMySQL.Integrating.LoadFromS3.XML"></a>

`LOAD XML FROM S3` ステートメントを使用して、Amazon S3 バケットに保存されている XML ファイルのデータを以下の 3 種類の 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 Statement](https://dev.mysql.com/doc/refman/8.0/en/load-xml.html)」を参照してください。

**ファイル \$1 プレフィックス**  
データを単一のファイルからロードするか、特定のプレフィックスに一致するすべてのファイルからロードするかを指定します。デフォルトは `FILE` です。

**置換 \$1 無視**  
入力行とデータベーステーブルの既存の行で一意のキー値が同じである場合、どのアクションを実行するかを決定します。  
+ テーブル内の既存の行を入力行で置き換える場合は、`REPLACE` を指定します。
+ 入力行を破棄する場合は、`IGNORE` を指定します。デフォルトは `IGNORE` です。

**テーブルに**  
入力行をロードする先のデータベーステーブルの名前を指定します。

**PARTITION**  
すべての入力行を、指定されたカンマ区切りのパーティション名のリストに記載されているパーティション内に挿入することを要求します。指定されたパーティションのいずれかに入力行を挿入できない場合、ステートメントは失敗し、エラーが返されます。

**文字セット**  
入力ファイルのデータの文字セットを指定します。

**行の識別**  
入力ファイルの行を識別する要素名を指定します。デフォルトは `<row>` です。

***number* 行を無視 \$1 行**  
入力ファイルの先頭の特定の数の行または列を無視することを指定します。例えば、`IGNORE 1 LINES` ではテキストファイルの初期の行がスキップされます。`IGNORE 2 ROWS` では、入力 XML の初期の 2 行のデータがスキップされます。

**field\$1name\$1or\$1user\$1var, ..。**  
ロードする要素を名前で指定する 1 つ以上の XML 要素名またはユーザー変数のカンマ区切りのリストを指定します。この目的で使用されるユーザー可変の名前は、プレフィックスを @ とする XML ファイルの要素名と一致する必要があります。フィールド値を対応するユーザー可変に保存して後で再利用できます。  
例えば、次のステートメントでは、入力ファイルの初期の列を `table1` の初期の列内にロードし、さらに `table_column2` の `table1` 列の値として、2 列目の入力値を 100 で割った値を設定します。  

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

**SET**  
テーブル内の列の値を入力ファイルに含まれていない値に設定する代入操作のカンマ区切りのリストを指定します。  
例えば、次のステートメントは `table1` の初期の 2 列を入力ファイルの初期の 2 列の値に設定し、さらに `column3` の `table1` の値を現在のタイムスタンプに設定します。  

```
LOAD XML FROM S3 's3://amzn-s3-demo-bucket/data.xml'
   INTO TABLE table1
   (column1, column2)
   SET column3 = CURRENT_TIMESTAMP;
```
`SET` 割り当ての右側のサブクエリを使用できます。列に割り当てる値を返すサブクエリとしては、スカラーサブクエリのみ使用できます。また、サブクエリを使用してロード中のテーブルから選択することはできません。