Caricamento di dati in un cluster Amazon Aurora My SQL DB da file di testo in un bucket Amazon S3 - Amazon Aurora

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
  1. 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:Decryptautorizzazione 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).

  2. 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.

  3. 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.

  4. Per Aurora My SQL versione 2, imposta il parametro del cluster aurora_load_from_s3_role o aws_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.

  5. 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

  6. 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 role_name orSET 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 nel My SQL Reference Manual.

Questo vale solo per la sessione attiva corrente. Quando ti riconnetti, devi eseguire nuovamente l'SET ROLEistruzione per concedere i privilegi. Per ulteriori informazioni, vedere l'SETROLEistruzione nel My SQL Reference Manual.

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 ROLEistruzione in modo esplicito per attivare un ruolo. Per ulteriori informazioni, vedere activate_all_roles_on_login nel My Reference Manual. SQL

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 replica_skip_errors (Aurora My versione 3). SQL

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 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 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
  1. Accedi AWS Management Console e apri la console Amazon S3 all'indirizzo. https://console.aws.amazon.com/s3/

  2. Nel pannello di navigazione, scegli Bucket, quindi scegli il bucket da URI copiare.

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

  4. Scegli Copia S3. URI

LOADDATAFROMS3

È possibile utilizzare l'LOAD DATA FROM S3istruzione per caricare dati da qualsiasi formato di file di testo supportato dall'SQLLOADDATAINFILEistruzione My, ad esempio dati di testo delimitati da virgole. I file compressi non sono supportati.

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 nella documentazione MySQL.

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 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_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 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

È possibile utilizzare l'LOAD DATA FROM S3istruzione 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

load_prefix

Il URI that è stato specificato nell'istruzione load. Questo URI può corrispondere a uno dei seguenti elementi:

  • Un singolo file di dati per un'istruzione LOAD DATA FROM S3 FILE

  • Un prefisso Amazon S3 che mappa a più file di dati per un'istruzione LOAD DATA FROM S3 PREFIX

  • Un singolo file manifest contenente i nomi dei file da caricare per un'istruzione LOAD DATA FROM S3 MANIFEST

file_name

Il nome di un file che è stato caricato in Aurora da Amazon S3 utilizzando URI l'identificativo 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

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 S3istruzione 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 nella mia SQL documentazione.

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 o IGNORE 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 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.