Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Exécution de tâches ETL sur des tables Amazon S3 avec AWS Glue
AWS Glue est un service d'intégration de données sans serveur qui permet aux utilisateurs d'outils d'analyse de découvrir, de préparer, de déplacer et d'intégrer facilement des données provenant de sources multiples. Vous pouvez utiliser AWS Glue des tâches pour exécuter des pipelines d'extraction, de transformation et de chargement (ETL) afin de charger des données dans vos lacs de données. Pour plus d'informations AWS Glue, voir Qu'est-ce que c'est AWS Glue ? dans le Guide AWS Glue
du développeur.
Une AWS Glue tâche encapsule un script qui se connecte à vos données source, les traite, puis les écrit dans votre cible de données. En général, une tâche exécute les scripts d'extraction, de transformation et de chargement (ETL). Les jobs peuvent exécuter des scripts conçus pour les environnements Apache Spark d'exécution. Vous pouvez surveiller les exécutions de tâche pour comprendre les métriques d'exécution telles que le statut d'achèvement, la durée et l'heure de début.
Vous pouvez utiliser des AWS Glue tâches pour traiter les données de vos tables S3 en vous connectant à vos tables via l'intégration avec les services d' AWS analyse, ou en vous connectant directement à l'aide du point de Iceberg REST terminaison Amazon S3 Tables ou du catalogue de tables Amazon S3 pourApache Iceberg. Ce guide décrit les étapes de base pour commencer à utiliser AWS Glue S3 Tables, notamment :
Prérequis
Avant de pouvoir interroger des tables à partir AWS Glue d'une tâche, vous devez configurer un rôle IAM qui AWS Glue peut être utilisé pour exécuter la tâche et télécharger le catalogue des tables Amazon S3 dans un compartiment S3 auquel il AWS Glue peut accéder lors de l'exécution de la tâche. Apache Iceberg JAR
-
Intégrez vos compartiments de tables avec les services d’analytique AWS.
-
Créez un rôle IAM pour AWS Glue.
-
(Facultatif) Si vous utilisez le catalogue des tables Amazon S3, Apache Iceberg vous devez télécharger le catalogue client JAR et le charger dans un compartiment S3.
Téléchargement du catalogue JAR
-
Vérifiez la dernière version sur Maven Central. Vous pouvez le télécharger JAR depuis Maven Central à l'aide de votre navigateur ou à l'aide de la commande suivante. Assurez-vous de remplacer le version number
par la dernière version.
wget https://repo1.maven.org/maven2/software/amazon/s3tables/s3-tables-catalog-for-iceberg-runtime/0.1.5
/s3-tables-catalog-for-iceberg-runtime-0.1.5.jar
-
Téléchargez le fichier téléchargé JAR dans un compartiment S3 auquel votre rôle AWS Glue IAM peut accéder. Vous pouvez utiliser la AWS CLI commande suivante pour télécharger leJAR. Assurez-vous de remplacer le version number
par la dernière version et le bucket name
et path
par la vôtre.
aws s3 cp s3-tables-catalog-for-iceberg-runtime-0.1.5
.jar s3://amzn-s3-demo-bucket
/jars/
Création d'un script pour se connecter aux compartiments de table
Pour accéder aux données de votre table lorsque vous exécutez une tâche AWS Glue ETL, vous configurez une Spark session Apache Iceberg qui se connecte à votre compartiment de table S3. Vous pouvez modifier un script existant pour vous connecter à votre compartiment de table ou créer un nouveau script. Pour plus d'informations sur la création de AWS Glue scripts, consultez Tutoriel : rédaction d'un script AWS Glue pour Spark dans le guide du AWS Glue
développeur.
Vous pouvez configurer la session pour vous connecter à vos compartiments de table via l'une des méthodes d'accès aux tables S3 suivantes :
-
Intégration de S3 Tables aux services AWS d'analyse
-
Point de Iceberg REST terminaison Amazon S3 Tables
-
Catalogue de tables Amazon S3 pour Apache Iceberg
Choisissez l'une des méthodes d'accès suivantes pour consulter les instructions de configuration et les exemples de configuration.
- AWS analytics services integration
-
Pour interroger des tables en AWS Glue
utilisant l'intégration Spark des services AWS d'analyse, vous devez intégrer vos compartiments de tables aux AWS services d'analyse
Vous pouvez configurer la connexion à votre compartiment de table par le biais d'une Spark session dans le cadre d'une tâche ou par AWS Glue Studio magie dans le cadre d'une session interactive. Pour utiliser les exemples suivants, remplacez les par placeholder values
les informations relatives à votre propre compartiment de table.
- Utiliser un PySpark script
-
Utilisez l'extrait de code suivant dans un PySpark script pour configurer une AWS Glue tâche afin de se connecter à votre compartiment de table à l'aide de l'intégration.
spark = SparkSession.builder.appName("SparkIcebergSQL") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.defaultCatalog","s3tables") \
.config("spark.sql.catalog.s3tables", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.s3tables.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \
.config("spark.sql.catalog.s3tables.glue.id", "111122223333
:s3tablescatalog/amzn-s3-demo-table-bucket
") \
.config("spark.sql.catalog.s3tables.warehouse", "s3://amzn-s3-demo-table-bucket
/warehouse/") \
.getOrCreate()
- Utilisation d'une AWS Glue
session interactive
-
Si vous utilisez une session de bloc-notes interactive avec la AWS Glue
version 5.0, spécifiez les mêmes configurations en utilisant la %%configure
magie d'une cellule avant l'exécution du code.
%%configure
{"conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.defaultCatalog=s3tables --conf spark.sql.catalog.s3tables=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.s3tables.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog --conf spark.sql.catalog.s3tables.glue.id=111122223333
:s3tablescatalog/amzn-s3-demo-table-bucket
--conf spark.sql.catalog.s3tables.warehouse=s3://amzn-s3-demo-table-bucket
/warehouse/"}
- Amazon S3 Tables Iceberg REST endpoint
-
Vous pouvez configurer la connexion à votre compartiment de table par le biais d'une Spark session dans le cadre d'une tâche ou par AWS Glue Studio magie dans le cadre d'une session interactive. Pour utiliser les exemples suivants, remplacez les par placeholder values
les informations relatives à votre propre compartiment de table.
- Utiliser un PySpark script
Utilisez l'extrait de code suivant dans un PySpark script pour configurer une AWS Glue tâche afin de se connecter à votre compartiment de table à l'aide du point de terminaison.
spark = SparkSession.builder.appName("glue-s3-tables-rest") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.defaultCatalog", "s3_rest_catalog") \
.config("spark.sql.catalog.s3_rest_catalog", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.s3_rest_catalog.type", "rest") \
.config("spark.sql.catalog.s3_rest_catalog.uri", "https://s3tables.Region
.amazonaws.com/iceberg") \
.config("spark.sql.catalog.s3_rest_catalog.warehouse", "arn:aws:s3tables:Region
:111122223333
:s3tablescatalog/amzn-s3-demo-table-bucket
") \
.config("spark.sql.catalog.s3_rest_catalog.rest.sigv4-enabled", "true") \
.config("spark.sql.catalog.s3_rest_catalog.rest.signing-name", "s3tables") \
.config("spark.sql.catalog.s3_rest_catalog.rest.signing-region", "Region
") \
.config('spark.sql.catalog.s3_rest_catalog.io-impl','org.apache.iceberg.aws.s3.S3FileIO') \
.config('spark.sql.catalog.s3_rest_catalog.rest-metrics-reporting-enabled','false') \
.getOrCreate()
- Utilisation d'une AWS Glue
session interactive
Si vous utilisez une session de bloc-notes interactive avec la AWS Glue version 5.0, spécifiez les mêmes configurations en utilisant la %%configure
magie d'une cellule avant l'exécution du code. Remplacez les valeurs de l'espace réservé par les informations relatives à votre propre compartiment de table.
%%configure
{"conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.defaultCatalog=s3_rest_catalog --conf spark.sql.catalog.s3_rest_catalog=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.s3_rest_catalog.type=rest --conf spark.sql.catalog.s3_rest_catalog.uri=https://s3tables.Region
.amazonaws.com/iceberg --conf spark.sql.catalog.s3_rest_catalog.warehouse=arn:aws:s3tables:Region
:111122223333
:s3tablescatalog/amzn-s3-demo-table-bucket
--conf spark.sql.catalog.s3_rest_catalog.rest.sigv4-enabled=true --conf spark.sql.catalog.s3_rest_catalog.rest.signing-name=s3tables --conf spark.sql.catalog.s3_rest_catalog.rest.signing-region=Region
--conf spark.sql.catalog.s3_rest_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO --conf spark.sql.catalog.s3_rest_catalog.rest-metrics-reporting-enabled=false"}
- Amazon S3 Tables Catalog for Apache Iceberg
-
Pour vous connecter à des tables à l'aide du catalogue de tables Amazon S3, Apache Iceberg vous devez d'abord télécharger le dernier fichier jar du catalogue et le charger dans un compartiment S3. Ensuite, lorsque vous créez votre tâche, vous ajoutez le chemin d'accès au catalogue client JAR en tant que paramètre spécial. Pour plus d'informations sur les paramètres des tâches dans AWS Glue, consultez la section Paramètres spéciaux utilisés dans les AWS Glue tâches du Guide du AWS Glue développeur.
Vous pouvez configurer la connexion à votre compartiment de table par le biais d'une Spark session dans le cadre d'une tâche ou par AWS Glue Studio magie dans le cadre d'une session interactive. Pour utiliser les exemples suivants, remplacez les par placeholder values
les informations relatives à votre propre compartiment de table.
- Utiliser un PySpark script
-
Utilisez l'extrait de code suivant dans un PySpark script pour configurer une AWS Glue tâche afin de se connecter à votre compartiment de table à l'aide du. JAR Remplacez les valeurs de l'espace réservé par les informations relatives à votre propre compartiment de table.
spark = SparkSession.builder.appName("glue-s3-tables") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.defaultCatalog", "s3tablesbucket") \
.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
") \
.getOrCreate()
- Utilisation d'une AWS Glue
session interactive
-
Si vous utilisez une session de bloc-notes interactive avec la AWS Glue version 5.0, spécifiez les mêmes configurations en utilisant la %%configure
magie d'une cellule avant l'exécution du code. Remplacez les valeurs de l'espace réservé par les informations relatives à votre propre compartiment de table.
%%configure
{"conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.defaultCatalog=s3tablesbucket --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:Region
:111122223333:bucket/amzn-s3-demo-table-bucket
", "extra-jars": "s3://amzn-s3-demo-bucket
/jars/s3-tables-catalog-for-iceberg-runtime-0.1.5
.jar"}
Exemples de scripts
Les exemples de PySpark scripts suivants peuvent être utilisés pour tester l'interrogation des tables S3 avec une AWS Glue tâche. Ces scripts se connectent à votre compartiment de table et exécutent des requêtes pour : créer un nouvel espace de noms, créer un exemple de table, insérer des données dans la table et renvoyer les données de la table. Pour utiliser les scripts, remplacez-les par placeholder values
les informations relatives à votre propre compartiment de table.
Choisissez parmi les scripts suivants en fonction de votre méthode d'accès aux tables S3.
- S3 Tables integration with AWS analytics services
-
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("SparkIcebergSQL") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.defaultCatalog","s3tables")
.config("spark.sql.catalog.s3tables", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.s3tables.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \
.config("spark.sql.catalog.s3tables.glue.id", "111122223333
:s3tablescatalog/amzn-s3-demo-table-bucket
") \
.config("spark.sql.catalog.s3tables.warehouse", "s3://amzn-s3-demo-table-bucket
/bucket/amzn-s3-demo-table-bucket
") \
.getOrCreate()
namespace = "new_namespace
"
table = "new_table
"
spark.sql("SHOW DATABASES").show()
spark.sql(f"DESCRIBE NAMESPACE {namespace}").show()
spark.sql(f"""
CREATE TABLE IF NOT EXISTS {namespace}.{table} (
id INT,
name STRING,
value INT
)
""")
spark.sql(f"""
INSERT INTO {namespace}.{table}
VALUES
(1, 'ABC', 100),
(2, 'XYZ', 200)
""")
spark.sql(f"SELECT * FROM {namespace}.{table} LIMIT 10").show()
- Amazon S3 Tables Iceberg REST endpoint
-
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("glue-s3-tables-rest") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.defaultCatalog", "s3_rest_catalog") \
.config("spark.sql.catalog.s3_rest_catalog", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.s3_rest_catalog.type", "rest") \
.config("spark.sql.catalog.s3_rest_catalog.uri", "https://s3tables.Region
.amazonaws.com/iceberg") \
.config("spark.sql.catalog.s3_rest_catalog.warehouse", "arn:aws:s3tables:Region
:111122223333
:bucket/amzn-s3-demo-table-bucket
") \
.config("spark.sql.catalog.s3_rest_catalog.rest.sigv4-enabled", "true") \
.config("spark.sql.catalog.s3_rest_catalog.rest.signing-name", "s3tables") \
.config("spark.sql.catalog.s3_rest_catalog.rest.signing-region", "Region
") \
.config('spark.sql.catalog.s3_rest_catalog.io-impl','org.apache.iceberg.aws.s3.S3FileIO') \
.config('spark.sql.catalog.s3_rest_catalog.rest-metrics-reporting-enabled','false') \
.getOrCreate()
namespace = "s3_tables_rest_namespace
"
table = "new_table_s3_rest
"
spark.sql("SHOW DATABASES").show()
spark.sql(f"DESCRIBE NAMESPACE {namespace}").show()
spark.sql(f"""
CREATE TABLE IF NOT EXISTS {namespace}.{table} (
id INT,
name STRING,
value INT
)
""")
spark.sql(f"""
INSERT INTO {namespace}.{table}
VALUES
(1, 'ABC', 100),
(2, 'XYZ', 200)
""")
spark.sql(f"SELECT * FROM {namespace}.{table} LIMIT 10").show()
- Amazon S3 Tables Catalog for Apache Iceberg
-
from pyspark.sql import SparkSession
#Spark session configurations
spark = SparkSession.builder.appName("glue-s3-tables") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.defaultCatalog", "s3tablesbucket") \
.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
") \
.getOrCreate()
#Script
namespace = "new_namespace
"
table = "new_table
"
spark.sql(f"CREATE NAMESPACE IF NOT EXISTS s3tablesbucket.{namespace}")
spark.sql(f"DESCRIBE NAMESPACE {namespace}").show()
spark.sql(f"""
CREATE TABLE IF NOT EXISTS {namespace}.{table} (
id INT,
name STRING,
value INT
)
""")
spark.sql(f"""
INSERT INTO {namespace}.{table}
VALUES
(1, 'ABC', 100),
(2, 'XYZ', 200)
""")
spark.sql(f"SELECT * FROM {namespace}.{table} LIMIT 10").show()
Création d'une AWS Glue tâche qui interroge des tables
Les procédures suivantes indiquent comment configurer des AWS Glue tâches qui se connectent à vos compartiments de table S3. Vous pouvez le faire en utilisant AWS CLI ou en utilisant la console avec l'éditeur de AWS Glue Studio script. Pour plus d'informations, consultez la section Création de tâches AWS Glue dans le Guide de l'AWS Glue utilisateur.
La procédure suivante montre comment utiliser l'éditeur de AWS Glue Studio script pour créer une tâche ETL qui interroge vos tables S3.
Ouvrez la AWS Glue console à l'adresse https://console.aws.amazon.com/glue/.
-
Dans le volet de navigation, sélectionnez ETL jobs.
-
Choisissez l'éditeur de script, puis choisissez Upload script et téléchargez le PySpark script que vous avez créé pour interroger les tables S3.
-
Sélectionnez l'onglet Détails du Job et entrez les informations suivantes pour les propriétés de base.
-
Dans Nom, entrez le nom de la tâche.
-
Pour le rôle IAM, sélectionnez le rôle pour AWS Glue lequel vous avez créé.
-
(Facultatif) Si vous utilisez le catalogue de tables Amazon S3 pour la méthode Apache Iceberg d'accès, pour étendre les propriétés avancées et pour le JARs chemin dépendant, entrez l'URI S3 du fichier jar du catalogue client que vous avez chargé dans un compartiment S3 comme condition préalable. Par exemple, s3 ://amzn-s3-demo-bucket1
/jars
/s3- tables-catalog-for-iceberg -runtime- .jar 0.1.5
-
Choisissez Enregistrer pour créer la tâche.
-
Choisissez Exécuter, lancez la tâche et vérifiez l'état de la tâche sous l'onglet Exécutions.
La procédure suivante montre comment utiliser le AWS CLI pour créer une tâche ETL qui interroge vos tables S3. Pour utiliser les commandes, remplacez-les placeholder
values
par les vôtres.
-
Créez un AWS Glue emploi.
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"
}' \
--glue-version "5.0"
(Facultatif) Si vous utilisez le catalogue des tables Amazon S3 Apache Iceberg comme méthode d'accès, ajoutez le catalogue client JAR au --extra-jars
paramètre --default-arguments
using the. Remplacez le input placeholders
par le vôtre lorsque vous ajoutez le paramètre.
"--extra-jars": "s3://amzn-s3-demo-bucket
/jar-path
/s3-tables-catalog-for-iceberg-runtime-0.1.5
.jar"
-
Commencez votre travail.
aws glue start-job-run \
--job-name etl-tables-job
-
Pour vérifier l'état de votre tâche, copiez l'ID d'exécution de la commande précédente et saisissez-le dans la commande suivante.
aws glue get-job-run --job-name etl-tables-job
\
--run-id jr_ec9a8a302e71f8483060f87b6c309601ea9ee9c1ffc2db56706dfcceb3d0e1ad