Creazione di una tabella di Amazon S3
Una tabella Amazon S3 è una sottorisorsa di un bucket di tabelle. Le tabelle sono archiviate nel formato Apache Iceberg in modo da poterle utilizzare con motori di query e altre applicazioni che supportano Apache Iceberg. Amazon S3 ottimizza continuamente le tabelle per ridurre i costi di archiviazione e migliorare le prestazioni delle query di analisi.
Quando si crea una tabella, Amazon S3 genera automaticamente la relativa posizione nel warehouse. La posizione del warehouse è una posizione S3 univoca in cui è possibile leggere e scrivere oggetti associati alla tabella. Nell'esempio seguente viene illustrato il formato di una posizione del warehouse:
s3://63a8e430-6e0b-46f5-k833abtwr6s8tmtsycedn8s4yc3xhuse1b--table-s3
Il nome della risorsa Amazon (ARN) per le tabelle ha il seguente formato:
arn:aws:s3tables:region:owner-account-id:bucket/bucket-name/table/table-id
Per impostazione predefinita, in un bucket è possibile creare fino a 10,000 tabelle. Per richiedere un aumento della quota per i bucket di tabelle o le tabelle, contattare Supporto
È possibile creare una tabella utilizzando la console Amazon S3, REST API Amazon S3, AWS SDK, AWS Command Line Interface (AWS CLI) o motori di query collegati ai bucket di tabelle.
Quando si crea una tabella, è possibile specificare le relative impostazioni di crittografia, a meno che non si stia utilizzando Athena. Se non si specificano le impostazioni di crittografia, la tabella viene crittografata con le impostazioni predefinite per il bucket di tabelle. Per ulteriori informazioni, consulta Specifica della crittografia per tabelle.
Prerequisiti per la creazione di tabelle
Per creare una tabella, è necessario procedere come segue:
Creare uno spazio dei nomi nel bucket di tabelle.
Verificare di avere le autorizzazioni AWS Identity and Access Management (IAM) per
s3tables:CreateTablees3tables:PutTableData.Nota
Se si utilizza la crittografia SSE-KMS per la tabella, sono necessarie le autorizzazioni per
s3tables:PutTableEncryptione l’autorizzazioneDescribeKeyper la chiave AWS KMS scelta. Inoltre, la chiave AWS KMS utilizzata deve fornire a Tabelle S3 l’autorizzazione per eseguire la manutenzione automatica delle tabelle. Per ulteriori informazioni, consulta . Requisiti di autorizzazione per la crittografia SSE-KMS di Tabelle S3
Per ulteriori informazioni sui nomi di tabella validi, consulta Regole di denominazione per tabelle e spazi dei nomi.
Importante
Durante la creazione delle tabelle, è necessario utilizzare solo lettere minuscole nei nomi delle tabelle e nelle definizioni delle tabelle. Ad esempio, è necessario verificare che i nomi delle colonne siano tutti in minuscolo. Se il nome della tabella o la definizione della tabella contiene lettere maiuscole, la tabella non è supportata da AWS Lake Formation né dal AWS Glue Data Catalog. In questo caso, la tabella non sarà visibile ai servizi di analisi AWS come Amazon Athena, anche se i bucket di tabelle sono integrati con i servizi di analisi AWS.
Se la definizione della tabella contiene lettere maiuscole, viene visualizzato il seguente messaggio di errore durante l’esecuzione di una query SELECT in Athena: “GENERIC_INTERNAL_ERROR: Get table request failed: com.amazonaws.services.glue.model.ValidationException: Unsupported Federation Resource - Invalid table or column names.”
La procedura seguente utilizza la console di Amazon S3 per creare una tabella con Amazon Athena. Se non è ancora stato creato un namespace nel bucket di tabelle, è possibile farlo come parte di questo processo. Prima di eseguire i seguenti passaggi, assicurati di aver integrato i bucket di tabelle con i servizi di analisi AWS nella Regione in uso. Per ulteriori informazioni, consulta Integrazione di Tabelle Amazon S3 con i servizi di analisi AWS.
Nota
Quando si crea una tabella utilizzando Athena, quella tabella eredita le impostazioni di crittografia predefinite dal bucket di tabelle. Per utilizzare un tipo di crittografia diverso, è necessario creare la tabella utilizzando un altro metodo.
Per creare una tabella
Accedi alla Console di gestione AWS e apri la console Amazon S3 all’indirizzo https://console.aws.amazon.com/s3/
. -
Nel pannello di navigazione a sinistra, scegli Bucket di tabelle.
-
Nella pagina Bucket di tabelle, scegli il bucket in cui desideri creare una tabella.
-
Nella pagina dei dettagli del bucket, scegli Crea tabella con Athena.
-
Nella finestra di dialogo Crea tabella con Athena, effettua una delle seguenti operazioni:
-
Crea un nuovo namespace. Scegli Crea un namespace, quindi inserisci un nome nel campo Nome del namespace. I nomi dei namespace devono essere composti da un numero di caratteri compreso tra 1 e 255 ed essere univoci all’interno del bucket di tabelle. I caratteri validi sono a-z, 0-9 e i caratteri di sottolineatura (
_). I caratteri di sottolineatura non sono consentiti all’inizio dei nomi dei namespace. -
Selezionare Create namespace (Crea spazio dei nomi).
-
Specifica un namespace esistente. Scegli Specifica un namespace esistente nel bucket di tabelle. Quindi seleziona Scegli tra namespace esistenti o Inserisci un nome per il namespace esistente. Se sono presenti più di 1.000 namespace nel bucket, è necessario inserire il nome del namespace se non compare nell’elenco.
-
-
Scegli Crea tabella con Athena.
-
Si apre la console Amazon Athena e viene visualizzato l’editor di query Athena. Il campo Catalogo deve essere compilato con s3tablescatalog/ seguito dal nome del bucket di tabelle, ad esempio s3tablescatalog/
amzn-s3-demo-bucket. Il campo Database deve essere compilato con il namespace creato o selezionato in precedenza.Nota
Se non vedi questi valori nei campi Catalogo e Database, assicurati di aver integrato il bucket di tabelle gestito con i servizi di analisi AWS nella Regione in uso. Per ulteriori informazioni, consulta Integrazione di Tabelle Amazon S3 con i servizi di analisi AWS.
-
L’editor di query è popolato con una query di esempio da utilizzare per creare una tabella. Modifica la query per specificare il nome della tabella e le colonne della tabella.
-
Una volta modificata la query, scegli Esegui per creare la tabella.
Nota
-
Se ricevi l’errore
“Insufficient permissions to execute the query. Principal does not have any privilege on specified resource”quando provi a eseguire una query in Athena, assicurati di disporre delle necessarie autorizzazioni Lake Formation sulla tabella. Per ulteriori informazioni, consulta Concessione dell’autorizzazione Lake Formation per una tabella o un database. -
Se ricevi l’errore
“Iceberg cannot access the requested resource”quando provi a eseguire la query in Athena, accedi alla console AWS Lake Formation e assicurati di disporre delle autorizzazioni per il catalogo del bucket di tabelle e per il database (namespace) che hai creato. Non specificare una tabella quando fornisci queste autorizzazioni. Per ulteriori informazioni, consulta Concessione dell’autorizzazione Lake Formation per una tabella o un database. -
Se sono presenti lettere maiuscole nel nome della tabella o nei nomi delle colonne nella definizione della tabella, viene visualizzato il seguente messaggio di errore durante l’esecuzione di una query
SELECTin Athena:“GENERIC_INTERNAL_ERROR: Get table request failed: com.amazonaws.services.glue.model.ValidationException: Unsupported Federation Resource - Invalid table or column names.”Verifica che i nomi delle tabelle e delle colonne siano tutti in minuscolo.
-
Se la creazione della tabella viene completata, il nome della nuova tabella viene visualizzato nell’elenco delle tabelle in Athena. Quando torni alla console Amazon S3, la nuova tabella viene visualizzata nell’elenco Tabelle nella pagina dei dettagli del bucket di tabelle, dopo aver aggiornato l’elenco.
Questo esempio mostra come creare una tabella con uno schema utilizzando AWS CLI e specificando i metadati della tabella con JSON. Per utilizzare questo esempio, sostituisci con le informazioni appropriate.user
input placeholders
aws s3tables create-table --cli-input-json file://mytabledefinition.json
Per il file mytabledefinition.json, utilizza la seguente definizione di tabella di esempio. Per utilizzare questo esempio, sostituisci con le informazioni appropriate. user input
placeholders
{ "tableBucketARN": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket", "namespace": "your_namespace", "name": "example_table", "format": "ICEBERG", "metadata": { "iceberg": { "schema": { "fields": [ {"name": "id", "type": "int","required": true}, {"name": "name", "type": "string"}, {"name": "value", "type": "int"} ] } } } }
È possibile creare una tabella in un motore di query supportato collegato ai bucket di tabelle, ad esempio in una sessione Apache Spark su Amazon EMR.
L’esempio seguente mostra come creare una tabella con Spark utilizzando istruzioni CREATE e come aggiungere dati della tabella utilizzando istruzioni INSERT o leggendo i dati da un file esistente. Per utilizzare questo esempio, sostituisci con le informazioni appropriate.user input
placeholders
spark.sql( " CREATE TABLE IF NOT EXISTS s3tablesbucket.example_namespace.`example_table` ( id INT, name STRING, value INT ) USING iceberg " )
Dopo aver creato la tabella, è possibile caricare i dati nella tabella. Scegli tra i seguenti metodi:
Aggiungere i dati nella tabella utilizzando l’istruzione
INSERT.spark.sql( """ INSERT INTO s3tablesbucket.my_namespace.my_tableVALUES (1, 'ABC', 100), (2, 'XYZ', 200) """)Caricare un file di dati esistente.
Leggere i dati in Spark:
val data_file_location = "Path such as S3 URI to data file" val data_file = spark.read.parquet(data_file_location)Scrivere i dati in una tabella Iceberg:
data_file.writeTo("s3tablesbucket.my_namespace.my_table").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()