

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Caricamento dei dati in un cluster DB Amazon Aurora MySQL da file di testo in un bucket Amazon S3
<a name="AuroraMySQL.Integrating.LoadFromS3"></a><a name="load_from_s3"></a><a name="load_data"></a><a name="load_xml"></a>

Puoi usare l'istruzione `LOAD DATA FROM S3` o `LOAD XML FROM S3` per caricare i dati dai file memorizzati in un bucket Amazon S3. In Aurora MySQL, i file vengono prima archiviati sul disco locale e quindi importati nel database. Al termine delle importazioni nel database, i file locali vengono eliminati.

**Nota**  
Il caricamento dei dati in una tabella dai file di testo non è supportato in Aurora Serverless v1. È supportata per Aurora Serverless v2.

**Contents**
+ [Accesso di Aurora a Amazon S3;](#AuroraMySQL.Integrating.LoadFromS3.Authorize)
+ [Concessione dei privilegi per caricare dati in Amazon Aurora MySQL](#AuroraMySQL.Integrating.LoadFromS3.Grant)
+ [Specifica del  percorso (URI) in un bucket Amazon S3](#AuroraMySQL.Integrating.LoadFromS3.URI)
+ [LOAD DATA FROM S3](#AuroraMySQL.Integrating.LoadFromS3.Text)
  + [Sintassi](#AuroraMySQL.Integrating.LoadFromS3.Text.Syntax)
  + [Parameters](#AuroraMySQL.Integrating.LoadFromS3.Text.Parameters)
  + [Utilizzo di un manifest per specificare i file di dati da caricare](#AuroraMySQL.Integrating.LoadFromS3.Manifest)
    + [Verifica dei file caricati utilizzando la tabella aurora\$1s3\$1load\$1history](#AuroraMySQL.Integrating.LoadFromS3.Manifest.History)
  + [Esempi](#AuroraMySQL.Integrating.LoadFromS3.Text.Examples)
+ [LOAD XML FROM S3](#AuroraMySQL.Integrating.LoadFromS3.XML)
  + [Sintassi](#AuroraMySQL.Integrating.LoadFromS3.XML.Syntax)
  + [Parameters](#AuroraMySQL.Integrating.LoadFromS3.XML.Parameters)

## Accesso di Aurora a Amazon S3;
<a name="AuroraMySQL.Integrating.LoadFromS3.Authorize"></a>

Prima di poter caricare i dati da un bucket Amazon S3, è necessario innanzitutto concedere l'autorizzazione al cluster DB Aurora MySQL per accedere ad Amazon S3.

**Per concedere ad Aurora MySQL l'accesso ad Amazon S3**

1. Crea una policy AWS Identity and Access Management (IAM) che fornisca le autorizzazioni per bucket e oggetti che consentono al cluster Aurora MySQL DB di accedere ad Amazon S3. Per istruzioni, consulta [Creazione di una policy IAM per l'accesso alle risorse Amazon S3](AuroraMySQL.Integrating.Authorizing.IAM.S3CreatePolicy.md).
**Nota**  
In Aurora MySQL 3.05 e versioni successive, è possibile caricare oggetti crittografati utilizzando AWS KMS keys gestite dal cliente. A tale scopo, includi l'autorizzazione `kms:Decrypt` nella policy IAM. Per ulteriori informazioni, consulta [Creazione di una policy IAM per accedere alle AWS KMS risorse](AuroraMySQL.Integrating.Authorizing.IAM.KMSCreatePolicy.md).  
Non è necessaria questa autorizzazione per caricare oggetti crittografati utilizzando Chiavi gestite da AWS o chiavi gestite da Amazon S3 (SSE-S3).

1. Creare un ruolo IAM e collegare la policy IAM creata in [Creazione di una policy IAM per l'accesso alle risorse Amazon S3](AuroraMySQL.Integrating.Authorizing.IAM.S3CreatePolicy.md) al nuovo ruolo IAM. Per istruzioni, consulta [Creazione di un ruolo IAM per consentire ad Amazon Aurora di accedere ai servizi AWS](AuroraMySQL.Integrating.Authorizing.IAM.CreateRole.md).

1. Assicurati che il cluster DB stia utilizzando un gruppo di parametri del cluster DB personalizzato.

   Per ulteriori informazioni sulla creazione di un gruppo di parametri del cluster DB, consulta [Creazione di un gruppo di parametri del cluster DB in Amazon Aurora](USER_WorkingWithParamGroups.CreatingCluster.md).

1. Per Aurora MySQL versione 2, imposta il parametro del cluster di database `aurora_load_from_s3_role` o `aws_default_s3_role` sul nome della risorsa Amazon (ARN) del nuovo ruolo IAM. Se un ruolo IAM non è specificato per `aurora_load_from_s3_role`, Aurora utilizza il ruolo IAM specificato in `aws_default_s3_role`.

   Per Aurora MySQL versione 3, utilizza `aws_default_s3_role`.

   Se il cluster fa parte di un database globale Aurora, imposta questo parametro per ogni cluster Aurora nel database globale. Sebbene solo il cluster primario in un database globale Aurora può caricare i dati, un altro cluster potrebbe essere promosso dal meccanismo di failover e diventare il cluster primario.

   Per ulteriori informazioni sui parametri del cluster DB, vedi [Parametri dell’istanza database e del cluster database di Amazon Aurora](USER_WorkingWithDBClusterParamGroups.md#Aurora.Managing.ParameterGroups).

1. Per consentire l'accesso ad Aurora MySQL agli utenti del database in un cluster DB Amazon S3, è necessario associare il ruolo creato in [Creazione di un ruolo IAM per consentire ad Amazon Aurora di accedere ai servizi AWS](AuroraMySQL.Integrating.Authorizing.IAM.CreateRole.md) al cluster DB. Per un database globale Aurora, associa il ruolo a ogni cluster Aurora nel database globale. Per informazioni su come associare un ruolo IAM a un cluster DB, vedi [Associazione di un ruolo IAM a un cluster DB Amazon Aurora MySQL](AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.md).

1. Configura il cluster DB Aurora MySQL per consentire le connessioni in uscita ad Amazon S3. Per istruzioni, consulta [Abilitazione della comunicazione di rete da Amazon Aurora ad altri servizi AWS](AuroraMySQL.Integrating.Authorizing.Network.md). 

   Se il cluster DB non è accessibile pubblicamente e si trova in una sottorete pubblica VPC significa che è privato. Puoi creare un endpoint del gateway S3 per accedere al bucket S3. Per ulteriori informazioni, consulta [Endpoint gateway per Amazon S3](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html).

    Per un database globale Aurora, abilita le connessioni in uscita per ogni cluster Aurora nel database globale. 

## Concessione dei privilegi per caricare dati in Amazon Aurora MySQL
<a name="AuroraMySQL.Integrating.LoadFromS3.Grant"></a>

L'utente del database che invia l'istruzione `LOAD DATA FROM S3` o `LOAD XML FROM S3` deve avere un ruolo o privilegio specifico per rilasciare una delle due istruzioni. In Aurora MySQL versione 3, concedi il ruolo `AWS_LOAD_S3_ACCESS`. In Aurora MySQL versione 2, concedi il privilegio `LOAD FROM S3`. All'utente amministrativo per un cluster di database è concesso il ruolo o il privilegio appropriato per impostazione predefinita. Puoi concedere il privilegio a un altro utente usando le seguenti istruzioni.

 Utilizzare la seguente istruzione per Aurora MySQL versione 3: 

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

**Suggerimento**  
Quando utilizzi la tecnica basata sul ruolo in Aurora MySQL versione 3, puoi anche attivare il ruolo utilizzando l'istruzione `SET ROLE role_name` o `SET ROLE ALL`. Se non si ha familiarità con il sistema dei ruoli MySQL 8.0, è possibile ottenere ulteriori informazioni in [Privilegio basato sui ruoli](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model). Per maggiori dettagli, consulta la pagina [Using roles](https://dev.mysql.com/doc/refman/8.0/en/roles.html) nel *Manuale di riferimento di MySQL*.  
Questo vale solo per la sessione attiva corrente. Quando ti riconnetti, devi eseguire di nuovo l’istruzione `SET ROLE` per concedere i privilegi. Per ulteriori informazioni, consulta [Istruzione SET ROLE](https://dev.mysql.com/doc/refman/8.0/en/set-role.html) nel *Manuale di riferimento di MySQL*.  
Puoi utilizzare il parametro `activate_all_roles_on_login` del cluster di database per attivare automaticamente tutti i ruoli quando un utente si connette a un'istanza database. Quando questo parametro è impostato, non è necessario chiamare esplicitamente l’istruzione `SET ROLE` per attivare un ruolo. Per ulteriori informazioni, consulta [activate\$1all\$1roles\$1on\$1login](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_activate_all_roles_on_login) nel *Manuale di riferimento di MySQL*.  
Tuttavia, è necessario chiamare esplicitamente `SET ROLE ALL` all’inizio di una stored procedure per attivare il ruolo, quando la stored procedure viene chiamata da un altro utente.

Utilizza la seguente istruzione per Aurora MySQL versione 2:

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

Il ruolo `AWS_LOAD_S3_ACCESS` e il privilegio `LOAD FROM S3` sono specifici di Amazon Aurora e non sono disponibili per i database MySQL esterni o le istanze database RDS per MySQL. Se è stata impostata la replica tra un cluster di database Aurora come origine di replica e un database MySQL come client di replica, l’istruzione `GRANT` per il ruolo o il privilegio causa l’arresto della replica con un errore. Puoi ignorare l'errore in modo sicuro per riprendere la replica. Per ignorare l'errore su un'istanza RDS per MySQL, utilizza la procedura [mysql\$1rds\$1skip\$1repl\$1error](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql_rds_skip_repl_error.html). Per ignorare l'errore su un database MySQL esterno, usa la variabile di sistema [slave\$1skip\$1errors](https://dev.mysql.com/doc/refman/5.7/en/replication-options-replica.html#sysvar_slave_skip_errors) (Aurora MySQL versione 2) o [replica\$1skip\$1errors](https://dev.mysql.com/doc/refman/8.0/en/replication-options-replica.html#sysvar_replica_skip_errors) (Aurora MySQL versione 3).

**Nota**  
L’utente del database deve disporre di privilegi `INSERT` per il database in cui carica i dati.

## Specifica del  percorso (URI) in un bucket Amazon S3
<a name="AuroraMySQL.Integrating.LoadFromS3.URI"></a>

La sintassi per specificare il percorso (URI) dei file archiviati su un bucket Amazon S3 è la seguente.

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

Il percorso include i seguenti valori:
+ `region`(opzionale): la AWS regione che contiene il bucket Amazon S3 da cui caricare. Questo valore è facoltativo. Se non specifichi un valore per `region`, Aurora carica il file da Amazon S3 nella stessa regione del cluster DB.
+ `bucket-name` – Il nome del bucket Amazon S3 che contiene i dati da caricare. Sono supportati i prefissi degli oggetti che identificano un percorso di cartella virtuale.
+ `file-name-or-prefix` – Il nome del file di testo Amazon S3 o XML o un prefisso che identifica uno o più file di testo o XML da caricare. È anche possibile specificare un file manifest che identifica uno o più file di testo da caricare. Per ulteriori informazioni sull'utilizzo di un file manifest per caricare file di testo da Amazon S3, consulta [Utilizzo di un manifest per specificare i file di dati da caricare](#AuroraMySQL.Integrating.LoadFromS3.Manifest).

**Copia dell'URI dei file in un bucket S3**

1. Accedi a Console di gestione AWS e apri la console Amazon S3 all'indirizzo. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Nel riquadro di navigazione, scegli **Bucket**, quindi scegli il bucket di cui desideri copiare l'URI.

1. Seleziona il prefisso o il file che desideri caricare da S3.

1. Scegli **Copia URI S3**.

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

Puoi usare l'istruzione `LOAD DATA FROM S3` per caricare i dati da un qualsiasi formato di file di testo supportato dall'istruzione MySQL [LOAD DATA INFILE](https://dev.mysql.com/doc/refman/8.0/en/load-data.html), ad esempio i dati di testo delimitati da virgola. I file compressi non sono supportati.

**Nota**  
Assicurati che il cluster database Aurora MySQL consenta le connessioni in uscita a S3. Per ulteriori informazioni, consulta [Abilitazione della comunicazione di rete da Amazon Aurora ad altri servizi AWS](AuroraMySQL.Integrating.Authorizing.Network.md).

### Sintassi
<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,...]
```

**Nota**  
In Aurora MySQL 3.05 e versioni successive, la parola chiave `FROM` è facoltativa.

### Parameters
<a name="AuroraMySQL.Integrating.LoadFromS3.Text.Parameters"></a>

L'istruzione `LOAD DATA FROM S3` utilizza i seguenti parametri obbligatori e facoltativi. Altri dettagli su questi parametri sono disponibili in [Istruzione LOAD DATA](https://dev.mysql.com/doc/refman/8.0/en/load-data.html) nella documentazione di MySQL.

**FILE \$1 PREFIX \$1 MANIFEST**  
Indica se caricare i dati da un singolo file, da tutti i file che corrispondono a un determinato prefisso o da tutti i file in un manifesto specificato. `FILE` è il valore predefinito.

**S3-URI**  
Specifica l'URI per un file di testo o manifesto da caricare o un prefisso Amazon S3 da utilizzare. Specificare l'URI usando la sintassi descritta in [Specifica del  percorso (URI) in un bucket Amazon S3](#AuroraMySQL.Integrating.LoadFromS3.URI).

**REPLACE \$1 IGNORE**  
Determina quale azione intraprendere se una riga di input ha gli stessi valori chiave univoci di una riga esistente nella tabella del database.  
+ Specifica `REPLACE` se la riga di input deve sostituire la riga esistente nella tabella.
+ Specifica `IGNORE` se la riga di input deve essere scartata.

**INTO TABLE**  
Identifica il nome della tabella del database in cui caricare le righe di input.

**PARTITION**  
Richiede che tutte le righe di input vengano inserite nelle partizioni identificate dall'elenco specificato di nomi di partizione separati da virgola. Se una riga di input non può essere inserita in una delle partizioni specificate, l'istruzione non riesce e viene restituito un errore.

**CHARACTER SET**  
Identifica il set di caratteri dei dati nel file di input.

**FIELDS \$1 COLUMNS**  
Identifica il modo in cui i campi o le colonne nel file di input sono delimitati. I campi sono delimitati da tabulazioni per impostazione predefinita.

**LINES**  
Identifica il modo in cui le righe nel file di input sono delimitati. Le linee sono delimitate da un carattere di nuova riga (`'\n'`) per impostazione predefinita.

**IGNORA *number* RIGHE \$1 RIGHE**  
Specifica di ignorare un determinato numero di righe all'inizio del file di input. Ad esempio, è possibile utilizzare `IGNORE 1 LINES` per ignorare la riga di intestazione iniziale contenente i nomi di colonna o `IGNORE 2 ROWS` per ignorare le prime due righe di dati nel file di input. Se si utilizza anche `PREFIX`, `IGNORE` ignora un numero specifico di righe all'inizio del primo file di input.

**col\$1name\$1or\$1user\$1var, ...**  
Specifica un elenco separato da virgola di uno o più nomi di colonne o variabili utente che identificano quali colonne caricare in base al nome. Il nome di una variabile utente utilizzata per questo scopo deve corrispondere al nome di un elemento del file di testo, preceduto da @. Puoi utilizzare le variabili utente per memorizzare i valori dei campi corrispondenti per un successivo riutilizzo.  
Ad esempio, la seguente istruzione carica la prima colonna dal file di input nella prima colonna di `table1` e imposta il valore della colonna `table_column2` in `table1` sul valore di input della seconda colonna diviso per 100.  

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

**SET**  
Specifica l'elenco delle operazioni di assegnazione separate da virgole che imposta i valori delle colonne della tabella sui valori non inclusi nel file di input.  
Ad esempio, la seguente istruzione imposta le prime due colonne di `table1` sui valori delle prime due colonne del file di input e imposta il valore della colonna `column3` in `table1` sul timestamp corrente.  

```
LOAD DATA FROM S3  's3://amzn-s3-demo-bucket/data.txt'
    INTO TABLE table1
    (column1, column2)
    SET column3 = CURRENT_TIMESTAMP;
```
È possibile utilizzare le sottoquery nella parte destra delle assegnazioni `SET`. Per una sottoquery che restituisce un valore da assegnare a una colonna, puoi utilizzare solo una sottoquery scalare. Inoltre, non è possibile utilizzare una sottoquery per selezionare dalla tabella che viene caricata. 

Non puoi usare la parola chiave `LOCAL` dell'istruzione `LOAD DATA FROM S3` se stai caricando i dati da un bucket Amazon S3.

### Utilizzo di un manifest per specificare i file di dati da caricare
<a name="AuroraMySQL.Integrating.LoadFromS3.Manifest"></a>

È possibile utilizzare l'istruzione `LOAD DATA FROM S3` con la parola chiave `MANIFEST` per specificare un file manifest in formato JSON che elenca i file di testo da caricare in una tabella nel cluster DB.

Il seguente schema JSON descrive il formato e il contenuto di un file manifest.

```
{
    "$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"
}
```

Ogni `url` nel manifest deve specificare un URL con il nome bucket e il percorso completo dell'oggetto per il file, non solo un prefisso. Puoi utilizzare un manifest per caricare file da diversi bucket, regioni o file che non condividono lo stesso prefisso. Se una regione non è specificata nell'URL, viene utilizzata la regione del cluster DB Aurora di destinazione. L'esempio seguente mostra un file manifest che carica quattro file da diversi bucket.

```
{
  "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"
    }
  ]
}
```

Il flag facoltativo `mandatory` specifica se `LOAD DATA FROM S3` deve restituire un errore qualora il file non venga trovato. L'impostazione predefinita del flag `mandatory` è `false`. Indipendentemente dall'impostazione di `mandatory`, `LOAD DATA FROM S3` termina se non viene trovato alcun file.

I file manifest possono avere qualsiasi estensione. L'esempio seguente esegue l'istruzione `LOAD DATA FROM S3` con manifest nell'esempio precedente, che viene denominato **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);
```

Al termine dell'istruzione, per ogni file caricato viene scritta una voce nella tabella `aurora_s3_load_history`. 

#### Verifica dei file caricati utilizzando la tabella aurora\$1s3\$1load\$1history
<a name="AuroraMySQL.Integrating.LoadFromS3.Manifest.History"></a>

Ogni istruzione `LOAD DATA FROM S3` con esito positivo aggiorna la tabella `aurora_s3_load_history` nello schema `mysql` con una voce per ogni file che è stato caricato.

Dopo aver eseguito l'istruzione `LOAD DATA FROM S3`, puoi verificare quali file sono stati caricati eseguendo una query sulla tabella `aurora_s3_load_history`. Per visualizzare i file caricati da un'iterazione dell'istruzione, utilizza la clausola `WHERE` per filtrare i record sull'URI Amazon S3 per il file manifest utilizzato nell'istruzione. Se hai utilizzato lo stesso file manifest di prima, filtra i risultati utilizzando il campo `timestamp`.

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

La tabella seguente descrive i campi della tabella `aurora_s3_load_history`.


| Campo | Descrizione | 
| --- | --- | 
| `load_prefix` |  L'URI specificato nell'istruzione di caricamento. L'URI può mappare a uno dei seguenti elementi: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.LoadFromS3.html)  | 
|  `file_name`  |  Il nome di un file che è stato caricato in Aurora da Amazon S3 utilizzando l'URI identificato nel campo `load_prefix`.  | 
| `version_number` |  Il numero di versione del file identificato dal campo `file_name` che è stato caricato se il bucket Amazon S3 ha un numero di versione.  | 
|  `bytes_loaded`  |  Le dimensioni del file caricato in byte.  | 
| `load_timestamp`  |  Timestamp relativo al momento del completamento dell'istruzione `LOAD DATA FROM S3`.  | 

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

La seguente istruzione carica i dati da un bucket Amazon S3 che si trova nella stessa regione del cluster DB Aurora. L'istruzione legge i dati delimitati da virgole nel file `customerdata.txt` che si trova nel bucket Amazon S3 *amzn-s3-demo-bucket* e carica i dati nella tabella `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);
```

La seguente istruzione carica i dati da un bucket Amazon S3 che si trova in una regione diversa rispetto al cluster DB Aurora. L'istruzione legge i dati delimitati da virgole da tutti i file che corrispondono al prefisso di oggetto `employee-data` nel bucket Amazon S3 *amzn-s3-demo-bucket* nella regione `us-west-2` e carica i dati nella tabella `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);
```

La seguente istruzione carica i dati dai file specificati in un file manifest JSON denominato q1\$1sales.json nella tabella `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>

Puoi usare l'istruzione `LOAD XML FROM S3` per caricare i dati dai file XML memorizzati in un bucket Amazon S3 in uno dei seguenti tre diversi formati XML:
+ I nomi di colonna come attributi di un elemento `<row>`. Il valore dell'attributo identifica il contenuto del campo della tabella.

  ```
  <row column1="value1" column2="value2" .../>
  ```
+ I nomi di colonna come elementi figlio di un elemento `<row>`. Il valore dell'elemento figlio identifica il contenuto del campo della tabella.

  ```
  <row>
    <column1>value1</column1>
    <column2>value2</column2>
  </row>
  ```
+ I nomi di colonna nell'attributo `name` dell'elemento `<field>` in un elemento `<row>`. Il valore dell'elemento `<field>` identifica il contenuto del campo della tabella. 

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

### Sintassi
<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,...]
```

### Parameters
<a name="AuroraMySQL.Integrating.LoadFromS3.XML.Parameters"></a>

L'istruzione `LOAD XML FROM S3` utilizza i seguenti parametri obbligatori e facoltativi. Altri dettagli su questi parametri sono disponibili in [Istruzione LOAD XML](https://dev.mysql.com/doc/refman/8.0/en/load-xml.html) nella documentazione di MySQL.

**FILE \$1 PREFIX**  
Indica se caricare i dati da un singolo file o da tutti i file che corrispondono a un determinato prefisso. `FILE` è il valore predefinito.

**REPLACE \$1 IGNORE**  
Determina quale azione intraprendere se una riga di input ha gli stessi valori chiave univoci di una riga esistente nella tabella del database.  
+ Specifica `REPLACE` se la riga di input deve sostituire la riga esistente nella tabella.
+ Specifica `IGNORE` per ignorare la riga di input. `IGNORE` è il valore predefinito.

**INTO TABLE**  
Identifica il nome della tabella del database in cui caricare le righe di input.

**PARTITION**  
Richiede che tutte le righe di input vengano inserite nelle partizioni identificate dall'elenco specificato di nomi di partizione separati da virgola. Se una riga di input non può essere inserita in una delle partizioni specificate, l'istruzione non riesce e viene restituito un errore.

**CHARACTER SET**  
Identifica il set di caratteri dei dati nel file di input.

**ROWS IDENTIFIED BY**  
Identifica il nome dell'elemento che identifica una riga nel file di input. Il valore predefinito è `<row>`.

**IGNORA *number* RIGHE \$1 RIGHE**  
Specifica di ignorare un determinato numero di righe all'inizio del file di input. Ad esempio, è possibile utilizzare `IGNORE 1 LINES` per ignorare la prima riga del file di testo o `IGNORE 2 ROWS` per ignorare le prime due righe di dati nell'XML di input.

**field\$1name\$1or\$1user\$1var, ...**  
Specifica un elenco separato da virgola di uno o più nomi di elementi XML o variabili utente che identificano quali elementi caricare in base al nome. Il nome di una variabile utente utilizzata per questo scopo deve corrispondere al nome di un elemento del file XML, preceduto da @. Puoi utilizzare le variabili utente per memorizzare i valori dei campi corrispondenti per un successivo riutilizzo.  
Ad esempio, la seguente istruzione carica la prima colonna dal file di input nella prima colonna di `table1` e imposta il valore della colonna `table_column2` in `table1` sul valore di input della seconda colonna diviso per 100.  

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

**SET**  
Specifica l'elenco delle operazioni di assegnazione separate da virgole che imposta i valori delle colonne della tabella sui valori non inclusi nel file di input.  
Ad esempio, la seguente istruzione imposta le prime due colonne di `table1` sui valori delle prime due colonne del file di input e imposta il valore della colonna `column3` in `table1` sul timestamp corrente.  

```
LOAD XML FROM S3 's3://amzn-s3-demo-bucket/data.xml'
   INTO TABLE table1
   (column1, column2)
   SET column3 = CURRENT_TIMESTAMP;
```
È possibile utilizzare le sottoquery nella parte destra delle assegnazioni `SET`. Per una sottoquery che restituisce un valore da assegnare a una colonna, puoi utilizzare solo una sottoquery scalare. Inoltre, non è possibile utilizzare una sottoquery per eseguire selezioni nella tabella caricata.