Accesso alle tabelle Amazon S3 con il catalogo di Tabelle Amazon S3 per Apache Iceberg - Amazon Simple Storage Service

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 o scaricarlo direttamente da Maven. Quando ti connetti alle tabelle, il file JAR del catalogo client viene utilizzato come dipendenza nel momento in cui viene inizializzata una sessione Spark per Apache Iceberg.

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
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 versione del catalogo di Tabelle Amazon S3 per Apache Iceberg con la versione più recente del repository AWS Labs GitHub e l’ARN del bucket della tabella con 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 EXISTS s3tablesbucket.my_namespace")
  • Creare una tabella

    spark.sql(" CREATE TABLE IF NOT EXISTS s3tablesbucket.my_namespace.`my_table` ( id INT, name STRING, value INT ) USING iceberg ")
  • Eseguire una query su una tabella

    spark.sql(" SELECT * FROM s3tablesbucket.my_namespace.`my_table` ").show()
  • Inserire i dati in una tabella

    spark.sql( """ INSERT INTO s3tablesbucket.my_namespace.my_table VALUES (1, 'ABC', 100), (2, 'XYZ', 200) """)
  • Caricare un file di dati esistente in una tabella

    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()