Accesso alle tabelle Amazon S3 con il catalogo di Tabelle Amazon S3 per Apache Iceberg
È possibile accedere a Tabelle S3 dai motori di query open source come Apache Spark utilizzando il catalogo di Tabelle Amazon S3 per il catalogo client Apache Iceberg. Il catalogo di Tabelle Amazon S3 per Apache Iceberg è una libreria open source ospitata da AWS Labs. Traduce le operazioni di Apache Iceberg in motori di query (come l'individuazione di tabelle, l'aggiornamento dei metadati e l'aggiunta o la rimozione di tabelle) in operazioni API di Tabelle S3.
Il catalogo di Tabelle Amazon S3 per Apache Iceberg è distribuito come un file Maven JAR chiamato s3-tables-catalog-for-iceberg.jar. È possibile creare il file JAR del catalogo cliente dal repository AWS Labs GitHub
Utilizzo del catalogo di Tabelle Amazon S3 per Apache Iceberg con Apache Spark
È possibile utilizzare catalogo di Tabelle Amazon S3 per il catalogo client Apache Iceberg al fine di connettersi alle tabelle da applicazioni open source quando si inizializza una sessione Spark. Nella configurazione della sessione, devi specificare le dipendenze di Iceberg e di Amazon S3, nonché creare un catalogo personalizzato che utilizza il bucket della tabella come warehouse di metadati.
Prerequisiti
Un’identità IAM con accesso al bucket della tabella e alle azioni di Tabelle S3. Per ulteriori informazioni, consulta Gestione degli accessi per Tabelle S3.
Per inizializzare una sessione Spark utilizzando il catalogo di Tabelle Amazon S3 per Apache Iceberg
-
Inizializzare Spark utilizzando il seguente comando. Per utilizzare il comando, sostituisci il
numero di versionedel catalogo di Tabelle Amazon S3 per Apache Iceberg con la versione più recente del repository AWS Labs GitHube l’ ARN del bucket della tabellacon il tuo ARN.spark-shell \ --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.6.1,software.amazon.s3tables:s3-tables-catalog-for-iceberg-runtime:0.1.4\ --conf spark.sql.catalog.s3tablesbucket=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.s3tablesbucket.catalog-impl=software.amazon.s3tables.iceberg.S3TablesCatalog \ --conf spark.sql.catalog.s3tablesbucket.warehouse=arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket\ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
Esecuzione di query su Tabelle S3 con Spark SQL
Utilizzando Spark, è possibile eseguire operazioni DQL, DML e DDL sulle tabelle S3. Quando esegui una query sulle tabelle, devi utilizzare il nome completo della tabella, incluso il nome del catalogo della sessione, seguendo questo schema:
CatalogName.NamespaceName.TableName
Le seguenti query di esempio mostrano alcuni modi in cui è possibile interagire con le tabelle S3. Per utilizzare queste query di esempio nel tuo motore di query, sostituisci i valori segnaposto per l’input con le informazioni appropriate.
Per eseguire query sulle tabelle con Spark
-
Creare uno spazio dei nomi
spark.sql(" CREATE NAMESPACE IF NOT EXISTSs3tablesbucket.my_namespace") -
Creare una tabella
spark.sql(" CREATE TABLE IF NOT EXISTSs3tablesbucket.my_namespace.`my_table` ( id INT, name STRING, value INT ) USING iceberg ") -
Eseguire una query su una tabella
spark.sql(" SELECT * FROMs3tablesbucket.my_namespace.`my_table` ").show() -
Inserire i dati in una tabella
spark.sql( """ INSERT INTOs3tablesbucket.my_namespace.my_tableVALUES (1, 'ABC', 100), (2, 'XYZ', 200) """) -
Caricare un file di dati esistente in una tabella
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()