Exécution de tâches ETL sur des tables Amazon S3 avec AWS Glue - Amazon Simple Storage Service

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 :

Choisissez votre méthode d'accès en fonction des exigences spécifiques de votre poste AWS Glue ETL :

  • AWS intégration des services d'analyse (recommandée) : recommandée lorsque vous avez besoin d'une gestion centralisée des métadonnées entre plusieurs services AWS d'analyse, que vous devez tirer parti des autorisations existantes du catalogue de AWS Glue données et d'un contrôle d'accès précis avec Lake Formation, ou lorsque vous créez des pipelines ETL de production qui s'intègrent à d'autres AWS services tels qu'Athena ou Amazon EMR.

  • Point de Iceberg RESTterminaison Amazon S3 Tables : recommandé lorsque vous devez vous connecter à des tables S3 à partir de moteurs de requêtes tiers qui prennent en charge Apache Iceberg ou créent des applications ETL personnalisées nécessitant un accès direct à l'API REST, ou lorsque vous avez besoin de contrôler les opérations du catalogue sans dépendre du catalogue de AWS Glue données.

  • Catalogue de tables Amazon S3 pour Apache Iceberg : à utiliser uniquement pour les applications existantes ou pour des scénarios de programmation spécifiques nécessitant la bibliothèque cliente Java. Cette méthode n'est pas recommandée pour les nouvelles implémentations de tâches AWS Glue ETL en raison de la complexité et de la gestion des JAR dépendances supplémentaires.

Note

S3 Tables est pris en charge sur AWS Glue la version 5.0 ou supérieure.

Étape 1 — Prérequis

Avant de pouvoir interroger des tables à partir d'une AWS Glue tâche, vous devez configurer un rôle IAM qui AWS Glue peut être utilisé pour exécuter la tâche. Choisissez votre méthode d'accès pour voir les prérequis spécifiques à cette méthode.

AWS analytics services integration (Recommended)

Conditions préalables requises pour utiliser l'intégration AWS analytique de S3 Tables pour exécuter des AWS Glue tâches.

Amazon S3 Tables Iceberg REST endpoint

Conditions requises pour utiliser le point de Iceberg REST terminaison Amazon S3 Tables pour exécuter des tâches AWS Glue ETL.

Amazon S3 Tables Catalog for Apache Iceberg

Les prérequis utilisent le catalogue de tables Amazon S3 Apache Iceberg pour exécuter des tâches AWS Glue ETL.

  • Créez un rôle IAM pour AWS Glue.

    • Associez la politique AmazonS3TablesFullAccess gérée au rôle.

    • Associez la politique AmazonS3FullAccess gérée au rôle.

    • Pour utiliser 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
      1. 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
      2. 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/

Étape 2 — 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 des services AWS d'analyse S3 Tables (recommandé)

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

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.

À l'aide d'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.

À l'aide d'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: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()
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:bucket/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.

À l'aide d'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()

Étape 3 — Création d'une AWS Glue tâche qui interroge les 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 à l'aide de la console AWS CLI ou à l'aide de 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.

  1. Ouvrez la AWS Glue console à l'adresse https://console.aws.amazon.com/glue/.

  2. Dans le volet de navigation, sélectionnez les tâches ETL.

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

  4. 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éé.

  5. (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

  6. Choisissez Enregistrer pour créer la tâche.

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

  1. 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"
    Note

    (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"
  2. Commencez votre travail.

    aws glue start-job-run \ --job-name etl-tables-job
  3. 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