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 di dati in un cluster Amazon Aurora My SQL DB da file di testo in un bucket Amazon S3
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.
Accesso di Aurora a Amazon S3;
Prima di poter caricare i dati da un bucket Amazon S3, devi prima concedere al cluster Aurora My SQL DB l'autorizzazione ad accedere ad Amazon S3.
Per consentire ad Aurora My di SQL accedere ad Amazon S3
-
Crea una policy AWS Identity and Access Management (IAM) che fornisca le autorizzazioni per i bucket e gli oggetti che consentono al cluster Aurora My SQL DB di accedere ad Amazon S3. Per istruzioni, consulta Creazione di una IAM policy per l'accesso alle risorse di Amazon S3.
Nota
In Aurora My SQL versione 3.05 e successive, puoi caricare oggetti crittografati utilizzando la versione gestita dal cliente. AWS KMS keys A tal fine, includi l'
kms:Decrypt
autorizzazione nella tua politica. IAM Per ulteriori informazioni, consulta Creazione di una policy IAM per l'accesso alle risorseAWS KMS.Non è necessaria questa autorizzazione per caricare oggetti crittografati utilizzando Chiavi gestite da AWS o chiavi gestite da Amazon S3 (SSE-S3).
-
Crea un IAM ruolo e collega la IAM policy che hai creato Creazione di una IAM policy per l'accesso alle risorse di Amazon S3 al nuovo ruolo. IAM Per istruzioni, consulta Creazione di un ruolo IAM per consentire ad Amazon Aurora di accedere ai servizi AWS.
-
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.
-
Per Aurora My SQL versione 2, imposta il parametro del cluster
aurora_load_from_s3_role
oaws_default_s3_role
DB su Amazon Resource Name (ARN) del nuovo IAM ruolo. Se non è specificato un IAM ruolo peraurora_load_from_s3_role
, Aurora utilizza il IAM ruolo specificato in.aws_default_s3_role
Per Aurora My SQL versione 3, usa.
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.
-
Per consentire agli utenti del database in un cluster Aurora My SQL DB di accedere ad Amazon S3, associa il ruolo che hai creato Creazione di un ruolo IAM per consentire ad Amazon Aurora di accedere ai servizi AWS al cluster DB. Per un database globale Aurora, associa il ruolo a ogni cluster Aurora nel database globale. Per informazioni sull'associazione di un IAM ruolo a un cluster DB, consulta. Associazione di un ruolo IAM a un cluster DB Amazon Aurora MySQL
-
Configura il tuo cluster Aurora My SQL DB per consentire le connessioni in uscita ad Amazon S3. Per istruzioni, consulta Abilitazione della comunicazione di rete da Amazon Aurora ad altri servizi AWS.
Se il cluster DB non è accessibile pubblicamente e si trova in una sottorete VPC pubblica, è privato. Puoi creare un endpoint del gateway S3 per accedere al bucket S3. Per ulteriori informazioni, consulta Endpoint gateway per Amazon S3.
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 My SQL
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 My SQL version 3, concedi il AWS_LOAD_S3_ACCESS
ruolo. In Aurora My SQL version 2, concedi il LOAD FROM S3
privilegio. 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.
Usa la seguente dichiarazione per Aurora My SQL versione 3:
GRANT AWS_LOAD_S3_ACCESS TO 'user
'@'domain-or-ip-address
'
Suggerimento
Quando usi la tecnica del ruolo in Aurora My SQL versione 3, puoi anche attivare il ruolo utilizzando l'istruzione SET ROLE
orrole_name
SET ROLE
ALL
. Se non conosci il sistema di ruoli My SQL 8.0, puoi saperne di più in. Privilegio basato sui ruoli Per maggiori dettagli, consulta Usare i ruoli
Questo vale solo per la sessione attiva corrente. Quando ti riconnetti, devi eseguire nuovamente l'SET ROLE
istruzione per concedere i privilegi. Per ulteriori informazioni, vedere l'SETROLEistruzione
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, in genere non è necessario chiamare l'SET ROLE
istruzione in modo esplicito per attivare un ruolo. Per ulteriori informazioni, vedere activate_all_roles_on_login nel My Reference
Tuttavia, è necessario chiamare SET ROLE ALL
esplicitamente all'inizio di una stored procedure per attivare il ruolo, quando la stored procedure viene chiamata da un altro utente.
Usa la seguente dichiarazione per Aurora My SQL versione 2:
GRANT LOAD FROM S3 ON *.* TO 'user
'@'domain-or-ip-address
'
Il AWS_LOAD_S3_ACCESS
ruolo e il LOAD FROM S3
privilegio sono specifici di Amazon Aurora e non sono disponibili per i database SQL My esterni RDS o per le istanze SQL My DB. Se hai impostato la replica tra un cluster Aurora DB come origine di replica e un database SQL My come client di replica, l'istruzione per il ruolo o GRANT
il privilegio causa l'interruzione della replica con un errore. Puoi ignorare l'errore in modo sicuro per riprendere la replica. Per ignorare l'errore su un'istanza RDS for MySQL, utilizzate la procedura mysql_rds_skip_repl_error. Per ignorare l'errore su un SQL database My esterno, utilizzate la variabile di sistema slave_skip_errors (Aurora My SQL versione 2) o la variabile di sistema
Nota
L'utente del database deve disporre dei privilegi per il database in cui carica i INSERT
dati.
Specificare il percorso (URI) verso un bucket Amazon S3
La sintassi per specificare il percorso (URI) dei file archiviati in 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 perregion
, 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 o del file di testo di Amazon S3 o un prefisso che identifica uno o più XML file di testo da caricare. XML È 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.
Per copiare i file URI for in un bucket S3
Accedi AWS Management Console e apri la console Amazon S3 all'indirizzo. https://console.aws.amazon.com/s3/
-
Nel pannello di navigazione, scegli Bucket, quindi scegli il bucket da URI copiare.
-
Seleziona il prefisso o il file che desideri caricare da S3.
-
Scegli Copia S3. URI
LOADDATAFROMS3
È possibile utilizzare l'LOAD DATA FROM S3
istruzione per caricare dati da qualsiasi formato di file di testo supportato dall'SQLLOADDATAINFILE
Nota
Assicurati che il tuo cluster Aurora My SQL DB consenta connessioni in uscita a S3. Per ulteriori informazioni, consulta Abilitazione della comunicazione di rete da Amazon Aurora ad altri servizi AWS.
Sintassi
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 My SQL versione 3.05 e successive, la parola chiave FROM
è facoltativa.
Parametri
L'istruzione LOAD DATA FROM S3
utilizza i seguenti parametri obbligatori e facoltativi. Puoi trovare maggiori dettagli su alcuni di questi parametri in LOADDATAStatement
- FILE | PREFIX | 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
-
Speciifica il caricamento URI di un file di testo o manifesto o il prefisso Amazon S3 da utilizzare. Specificare l'URIutilizzo della sintassi descritta in. Specificare il percorso (URI) verso un bucket Amazon S3
- REPLACE | 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 | 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. - IGNORE
number
LINES | ROWS -
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 oIGNORE 2 ROWS
per ignorare le prime due righe di dati nel file di input. Se si utilizza anchePREFIX
,IGNORE
ignora un numero specifico di righe all'inizio del primo file di input. - col_name_or_user_var, ...
-
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 colonnatable_column2
intable1
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 colonnacolumn3
intable1
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
È possibile utilizzare l'LOAD DATA FROM S3
istruzione con la MANIFEST
parola chiave per specificare un file manifest in JSON formato che elenchi i file di testo da caricare in una tabella nel cluster DB.
JSONLo schema seguente 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"
}
Ciascuno url
nel manifesto deve specificare un URL nome del 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 non è specificata una regione inURL, viene utilizzata la regione del cluster Aurora DB 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_s3_load_history
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 WHERE
clausola per filtrare i record su Amazon URI S3 per il file manifesto 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 |
---|---|
|
Il URI that è stato specificato nell'istruzione load. Questo URI può corrispondere a uno dei seguenti elementi:
|
|
Il nome di un file che è stato caricato in Aurora da Amazon S3 utilizzando URI l'identificativo nel campo. |
|
Il numero di versione del file identificato dal campo |
|
Le dimensioni del file caricato in byte. |
|
Timestamp relativo al momento del completamento dell'istruzione |
Esempi
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 contenuto in customerdata.txt
amzn-s3-demo-bucket
Bucket Amazon S3, quindi 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 dell'oggetto nel employee-data
amzn-s3-demo-bucket
Bucket Amazon S3 nella us-west-2
regione, quindi 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);
L'istruzione seguente carica i dati dai file specificati in un file JSON manifest denominato q1_sales.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);
LOADXMLFROMS3
Puoi utilizzare l'LOAD XML FROM S3
istruzione per caricare dati dai XML file archiviati su un bucket Amazon S3 in uno dei 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
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,...]
Parametri
L'istruzione LOAD XML FROM S3
utilizza i seguenti parametri obbligatori e facoltativi. Puoi trovare maggiori dettagli su alcuni di questi parametri in LOADXMLStatement
- FILE | 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 | 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.
- ROWSIDENTIFIEDDI
-
Identifica il nome dell'elemento che identifica una riga nel file di input. Il valore predefinito è
<row>
. - IGNORE
number
LINES | ROWS -
Specifica di ignorare un determinato numero di righe all'inizio del file di input. Ad esempio, è possibile utilizzare
IGNORE 1 LINES
per saltare la prima riga del file di testo oIGNORE 2 ROWS
saltare le prime due righe di dati nell'input. XML - field_name_or_user_var, ...
-
Specificate un elenco separato da virgole di uno o più nomi di XML elementi o variabili utente che identificano gli elementi da caricare per nome. Il nome di una variabile utente utilizzata per questo scopo deve corrispondere al nome di un elemento del XML file, con il prefisso @. 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 colonnatable_column2
intable1
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 colonnacolumn3
intable1
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.