View a markdown version of this page

Creazione di una tabella di Amazon S3 - Amazon Simple Storage Service

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

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, puoi creare fino a 10.000 tabelle in un bucket da tavolo. Per richiedere un aumento della quota per i bucket di tabelle o le tabelle, contattare Supporto.

Puoi creare una tabella utilizzando la console Amazon S3, l'API REST di Amazon S3 AWS SDKs AWS Command Line Interface ,AWS CLI() o i motori di query collegati ai bucket di tabella.

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 un bucket di tabelle.

  • Creare un namespace nel bucket di tabelle.

  • Assicurati di disporre delle autorizzazioni AWS Identity and Access Management (IAM) per e. s3tables:CreateTable s3tables:PutTableData

  • Nota

    Se utilizzi la crittografia SSE-KMS per la tua tabella, hai bisogno delle autorizzazioni e dell'DescribeKeyautorizzazione per s3tables:PutTableEncryption la chiave scelta. AWS KMS Inoltre, la AWS KMS chiave che usi deve concedere a S3 Tables 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 o la definizione della tabella contengono lettere maiuscole, la tabella non è supportata da AWS Lake Formation o da. AWS Glue Data Catalog In questo caso, la tua tabella non sarà visibile ai servizi di AWS analisi come Amazon Athena, anche se i tuoi table bucket sono integrati con AWS servizi di analisi.

Se la definizione della tabella contiene lettere maiuscole, ricevi il seguente messaggio di errore quando esegui una SELECT query in Athena: «GENERIC_INTERNAL_ERROR: Get table request failed: com.amazonaws.services.glue.model. ValidationException: Risorsa federativa non supportata: nomi di tabelle o colonne non validi».

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 delle tabelle AWS Amazon S3 con i servizi di analisi.

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

  2. Nel pannello di navigazione a sinistra, scegli Bucket di tabelle.

  3. Nella pagina Bucket di tabelle, scegli il bucket in cui desideri creare una tabella.

  4. Nella pagina dei dettagli del bucket, scegli Crea tabella con Athena.

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

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

  6. Scegli Crea tabella con Athena.

  7. 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 delle tabelle AWS Amazon S3 con i servizi di analisi.

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

  9. 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 non può accedere alla risorsa richiesta» quando provi a eseguire una query in Athena, vai alla console e assicurati di esserti concesso le autorizzazioni per AWS Lake Formation il catalogo e il database di table bucket (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 ricevi il seguente messaggio di errore durante l'esecuzione di una SELECT query in Athena, questo messaggio è causato dalla presenza di lettere maiuscole nel nome della tabella o nei nomi delle colonne nella definizione della tabella: «GENERIC_INTERNAL_ERROR: Get table request failed: com.amazonaws.services.glue.model. ValidationException: Risorsa federativa non supportata: nomi di tabelle o colonne non validi.» 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 user input placeholders con le informazioni appropriate.

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 user input placeholders con le informazioni appropriate.

{ "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 user input placeholders con le informazioni appropriate.

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_table VALUES (1, 'ABC', 100), (2, 'XYZ', 200) """)
  • Caricare un file di dati esistente.

    1. 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)
    2. Scrivere i dati in una tabella Iceberg:

      data_file.writeTo("s3tablesbucket.my_namespace.my_table").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()