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à.
Nota
L'integrazione con i servizi di AWS analisi per i bucket da tavolo è in versione di anteprima ed è soggetta a modifiche.
AWS Glue è un servizio di integrazione dei dati senza server che consente agli utenti di analisi di scoprire, preparare, spostare e integrare facilmente i dati provenienti da più fonti. Puoi utilizzare i AWS Glue processi per eseguire pipeline di estrazione, trasformazione e caricamento (ETL) per caricare i dati nei tuoi data lake. Per ulteriori informazioni su AWS Glue, consulta What is? AWS Glue nella Guida per gli AWS Glue sviluppatori.
Un AWS Glue job incapsula uno script che si connette ai dati di origine, li elabora e quindi li scrive nella destinazione dei dati. Di solito un processo esegue script di estrazione, trasformazione e caricamento (ETL). Jobs può eseguire script progettati per Apache Spark e Ray ambienti di runtime o per scopi generici Python script (Python lavori di shell). È possibile monitorare le esecuzioni dei processi per comprendere i parametri di runtime come esito positivo, durata e ora di inizio.
Puoi utilizzare i AWS Glue job per elaborare i dati nelle tue tabelle S3 connettendoti direttamente alle tabelle utilizzando il catalogo client Amazon S3 Tables Catalog per Apache Iceberg. JAR.
Prerequisiti per i lavori ETL di S3 Tables AWS Glue
Prima di poter interrogare le tabelle da un AWS Glue job, devi configurare un ruolo IAM da AWS Glue utilizzare per eseguire il job e caricare Amazon S3 Tables Catalog for Apache Iceberg. JAR a un bucket S3 a cui AWS Glue può accedere quando esegue il processo.
-
Integrare i bucket di tabelle con i servizi di analisi di AWS.
-
Crea un ruolo IAM per. AWS Glue
Allega la policy
AmazonS3TablesFullAccess
gestita al ruolo.Allega la policy
AmazonS3FullAccess
gestita al ruolo.
Scarica l'ultima versione del catalogo clienti Amazon S3 Tables Catalog for Apache Iceberg JAR da Maven e poi caricalo in un bucket Amazon S3.
Controlla la versione più recente su Maven Central.
Puoi scaricare il JAR da Maven central utilizzando il browser o utilizzando il seguente comando. Assicurati di sostituirlo version number
con la versione più recente.wget https://repo1.maven.org/maven2/software/amazon/s3tables/s3-tables-catalog-for-iceberg-runtime/
0.1.4
/s3-tables-catalog-for-iceberg-runtime-0.1.4
.jarCarica il file scaricato JAR a un bucket S3 a cui il tuo ruolo AWS Glue IAM può accedere. È possibile utilizzare il seguente AWS CLI comando per caricare il JAR. Assicurati di sostituirla
version number
con la versione più recente e poibucket name and path
con la tua.aws s3 cp s3-tables-catalog-for-iceberg-runtime-
0.1.4
.jar s3://amzn-s3-demo-bucket1
/jars/
Crea un AWS Glue ETL PySpark script per interrogare le tabelle S3
Per accedere ai dati della tabella quando si esegue un processo AWS Glue ETL, si utilizza un PySpark script per configurare un Spark sessione per Apache Iceberg che si connette al tuo table bucket S3 quando il job è in esecuzione. Puoi modificare uno script esistente per connetterti ai tuoi table bucket o creare un nuovo script. Per ulteriori informazioni sulla creazione di AWS Glue script, consulta Tutorial: Writing an AWS Glue for Spark script nella Developer Guide.AWS Glue
Usa il seguente frammento di codice nel tuo PySpark script per la configurazione Sparkè la connessione al tuo table bucket. placeholder values
Sostituiscili con le informazioni per il tuo bucket da tavolo.
# Configure Spark session for Iceberg spark_conf = SparkSession.builder.appName("GlueJob") .config("spark.sql.catalog.s3tablesbucket", "org.apache.iceberg.spark.SparkCatalog") .config("spark.sql.catalog.s3tablesbucket.catalog-impl", "software.amazon.s3tables.iceberg.S3TablesCatalog") .config("spark.sql.catalog.s3tablesbucket.warehouse", "arn:aws:s3tables:
REGION
:111122223333
:bucket/amzn-s3-demo-table-bucket
") .config("spark.sql.defaultCatalog", "s3tablesbucket") .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") .config("spark.sql.catalog.s3tablesbucket.cache-enabled", "false")
Script di esempio
Di seguito è riportato un esempio PySpark script che puoi usare per testare l'interrogazione delle tabelle S3 con un AWS Glue job. Lo script si connette al bucket della tabella e quindi esegue query per: creare un nuovo namespace, creare una tabella di esempio, inserire dati nella tabella e i dati della tabella. Per utilizzare lo script, sostituiscilo placeholder values
con le informazioni relative al tuo table bucket.
import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from pyspark.sql import SparkSession # Configure Spark session for Iceberg spark_conf = SparkSession.builder.appName("GlueJob") .config("spark.sql.catalog.s3tablesbucket", "org.apache.iceberg.spark.SparkCatalog") .config("spark.sql.catalog.s3tablesbucket.catalog-impl", "software.amazon.s3tables.iceberg.S3TablesCatalog") .config("spark.sql.catalog.s3tablesbucket.warehouse", "arn:aws:s3tables:
REGION
:111122223333
:bucket/amzn-s3-demo-table-bucket
") .config("spark.sql.defaultCatalog", "s3tablesbucket") .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") .config("spark.sql.catalog.s3tablesbucket.cache-enabled", "false") # Initialize Glue context with custom Spark configuration sc = SparkContext.getOrCreate(conf=spark_conf.getOrCreate().sparkContext.getConf()) glueContext = GlueContext(sc) spark = glueContext.spark_session ## @params: [JOB_NAME] args = getResolvedOptions(sys.argv, ['JOB_NAME']) job = Job(glueContext) job.init(args['JOB_NAME'], args) namespace = "new_namespace
" table = "new_table
" def run_sql(query): try: result = spark.sql(query) result.show() return result except Exception as e: print(f"Error executing query '{query}': {str(e)}") return None def main(): try: # Create a new namespace if it doesn't exist print("CREATE NAMESPACE") run_sql(f"CREATE NAMESPACE IF NOT EXISTS {namespace}") # Show all namespaces print("SHOW NAMESPACES") run_sql("SHOW NAMESPACES") # Describe a specific namespace print("DESCRIBE NAMESPACE") run_sql(f"DESCRIBE NAMESPACE {namespace}") # Create table in the namespace print("CREATE TABLE") create_table_query = f""" CREATE TABLE IF NOT EXISTS {namespace}.{table} ( id INT, name STRING, value INT ) """ run_sql(create_table_query) # Insert data into table print("INSERT INTO") insert_query = f""" INSERT INTO {namespace}.{table} VALUES (1, 'ABC', 100), (2, 'XYZ', 200) """ run_sql(insert_query) # Show tables in the namespace print("SHOW TABLES") run_sql(f"SHOW TABLES IN {namespace}") # Select all from a specific table print("SELECT FROM TABLE") run_sql(f"SELECT * FROM {namespace}.{table} LIMIT 20") except Exception as e: print(f"An error occurred in main execution: {str(e)}") raise # Re-raise the exception for Glue to handle finally: job.commit() if __name__ == "__main__": try: main() except Exception as e: print(f"Job failed with error: {str(e)}") sys.exit(1)
Crea un job AWS Glue ETL che interroga le tabelle S3
Quando configuri un AWS Glue lavoro per le tabelle S3, includi Amazon S3 Tables Catalog per Apache Iceberg. JAR come dipendenza aggiuntiva per consentire al job di interrogare direttamente le tabelle. Le seguenti procedure mostrano come eseguire questa operazione utilizzando AWS CLI o utilizzando la console con AWS Glue Studio. AWS Glue Studio per creare un lavoro tramite un'interfaccia visiva, un taccuino di codice interattivo o un editor di script. Per ulteriori informazioni, consulta la sezione Creazione di lavori AWS Glue nella Guida per l'AWS Glue utente.
La procedura seguente mostra come utilizzare l'editor di AWS Glue Studio script per creare un job ETL che interroga le tabelle S3.
Prerequisiti
Apri la console all' AWS Glue indirizzo. https://console.aws.amazon.com/glue/
Dal riquadro di navigazione, scegli ETL jobs.
Scegliete Script editor, quindi scegliete Carica script e caricate il PySpark script che hai creato per interrogare le tabelle S3.
Seleziona la scheda Dettagli del lavoro e inserisci quanto segue per le proprietà di base.
In Nome, inserisci un nome per il lavoro.
Per IAM Role, seleziona il ruolo per cui hai creato AWS Glue.
Espandi le proprietà avanzate e, in Dependent JARs path, inserisci l'URI S3 del client catalog jar che hai caricato in un bucket S3 come prerequisito. Ad esempio, s3:///
amzn-s3-demo-bucket1
/s3- -runtime- .jarjars
tables-catalog-for-iceberg0.1.4
Scegliete Salva per creare il lavoro.
Scegli Esegui, avvia il processo e controlla lo stato del lavoro nella scheda Esecuzioni.
La procedura seguente mostra come utilizzare per AWS CLI creare un job ETL che interroga le tabelle S3. Per utilizzare i comandi, sostituiscili placeholder values
con i tuoi.
Prerequisiti
Crea un lavoro Glue.
aws glue create-job \ --name
etl-tables-job
\ --role arn:aws:iam::111122223333
:role/AWSGlueServiceRole
\ --command '{ "Name": "glueetl", "ScriptLocation": "s3://amzn-s3-demo-bucket1
/scripts/glue-etl-query.py
", "PythonVersion": "3" }' \ --default-arguments '{ "--job-language": "python", "--class": "GlueApp", "--extra-jars": "s3://amzn-s3-demo-bucket1
/jars/
s3-tables-catalog-for-iceberg-runtime-0.1.4
.jar" }' \ --glue-version "5.0"Inizia il tuo lavoro.
aws glue start-job-run \ --job-name
etl-tables-job
Per verificare lo stato del processo, copia l'ID di esecuzione dal comando precedente e inseriscilo nel comando seguente.
aws glue get-job-run --job-name
etl-tables-job
\ --run-idjr_ec9a8a302e71f8483060f87b6c309601ea9ee9c1ffc2db56706dfcceb3d0e1ad