Utilisation du cadre Delta Lake dans AWS Glue - AWS Glue

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.

Utilisation du cadre Delta Lake dans AWS Glue

AWS Glue 3.0 et versions ultérieures prennent en charge le cadre Delta Lake de Linux Foundation. Delta Lake est un cadre de stockage de lac de données open source qui vous permet d'effectuer des transactions ACID, d'adapter la gestion des métadonnées et d'unifier le streaming et le traitement des données par lots. Cette rubrique décrit les fonctionnalités disponibles pour utiliser vos données dans AWS Glue lors de leur transport ou de leur stockage dans une table Delta Lake. Pour en savoir plus sur Delta Lake, consultez la documentation officielle de Delta Lake.

Vous pouvez utiliser AWS Glue pour effectuer des opérations de lecture et d'écriture sur des tables Delta Lake dans Amazon S3, ou travailler avec des tables Delta Lake à l'aide du catalogue de données AWS Glue. Des opérations supplémentaires telles que l'insertion, la mise à jour et la lecture et l'écriture de tables par lots sont également prises en charge. Lorsque vous utilisez des tables Delta Lake, vous avez également la possibilité d'avoir recours à des méthodes de la bibliothèque Python de Delta Lake, telles que DeltaTable.forPath. Pour plus d'informations sur la bibliothèque Python de Delta Lake, consultez la documentation Python de Delta Lake.

Le tableau suivant répertorie les versions de Delta Lake incluses dans chaque version de AWS Glue.

Version de AWS Glue Version de Delta Lake prise en charge
4.0 2.1.0
3.0 1.0.0

Pour en savoir plus sur les cadres de lac de données pris en charge par AWS Glue, consultez Utilisation de cadres de lac de données avec des tâches AWS Glue ETL.

Activation de Delta Lake pour AWS Glue

Pour activer Delta Lake pour AWS Glue, procédez comme suit :

  • Spécifiez delta comme valeur pour le paramètre de tâche --datalake-formats. Pour plus d’informations, consultez Paramètres des tâches AWS Glue.

  • Créez une clé nommée --conf pour votre tâche AWS Glue et définissez-la sur la valeur suivante. Vous pouvez également définir la configuration suivante à l'aide de SparkConf dans votre script. Ces paramètres permettent à Apache Spark de gérer correctement les tables Delta Lake.

    spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog --conf spark.delta.logStore.class=org.apache.spark.sql.delta.storage.S3SingleDriverLogStore
  • La prise en charge des autorisations de Lake Formation pour les tables Delta est activée par défaut pour AWS Glue 4.0. Aucune configuration supplémentaire n'est nécessaire pour la lecture/écriture dans les tables Delta enregistrées dans Lake Formation. Pour lire une table Delta enregistrée, le rôle IAM de la tâche AWS Glue doit disposer de l'autorisation SELECT. Pour écrire dans une table Delta enregistrée, le rôle IAM de la tâche AWS Glue doit disposer de l'autorisation SELECT. Pour en savoir plus sur la gestion des autorisations de Lake Formation, consultez la section Octroi et révocation d'autorisations liées aux ressources du catalogue de données.

Utilisation d'une autre version de Delta Lake

Pour utiliser une version de Delta Lake non prise en charge par AWS Glue, spécifiez vos propres fichiers JAR Delta Lake à l'aide du paramètre de tâche --extra-jars. N'incluez pas delta comme valeur du paramètre de tâche --datalake-formats. Dans cette situation, pour utiliser la bibliothèque Python de Delta Lake, vous devez spécifier les fichiers JAR de la bibliothèque à l'aide du paramètre de tâche --extra-py-files. La bibliothèque Python est fournie dans les fichiers JAR de Delta Lake.

Exemple : écriture d'une table Delta Lake sur Amazon S3 et enregistrement dans le catalogue de données AWS Glue

Le script AWS Glue ETL suivant montre comment écrire une table Delta Lake sur Amazon S3 et l'enregistrer dans le catalogue de données AWS Glue.

Python
# Example: Create a Delta Lake table from a DataFrame # and register the table to Glue Data Catalog additional_options = { "path": "s3://<s3Path>" } dataFrame.write \ .format("delta") \ .options(**additional_options) \ .mode("append") \ .partitionBy("<your_partitionkey_field>") \ .saveAsTable("<your_database_name>.<your_table_name>")
Scala
// Example: Example: Create a Delta Lake table from a DataFrame // and register the table to Glue Data Catalog val additional_options = Map( "path" -> "s3://<s3Path>" ) dataFrame.write.format("delta") .options(additional_options) .mode("append") .partitionBy("<your_partitionkey_field>") .saveAsTable("<your_database_name>.<your_table_name>")

Exemple : lecture d'une table Delta Lake depuis Amazon S3 à l'aide du catalogue de données AWS Glue

Le script ETL AWS Glue suivant lit la table Delta Lake que vous avez créée dans Exemple : écriture d'une table Delta Lake sur Amazon S3 et enregistrement dans le catalogue de données AWS Glue.

Python

Pour cet exemple, utilisez la méthode create_data_frame.from_catalog.

# Example: Read a Delta Lake table from Glue Data Catalog from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext() glueContext = GlueContext(sc) df = glueContext.create_data_frame.from_catalog( database="<your_database_name>", table_name="<your_table_name>", additional_options=additional_options )
Scala

Pour cet exemple, utilisez la méthode getCatalogSource.

// Example: Read a Delta Lake table from Glue Data Catalog import com.amazonaws.services.glue.GlueContext import org.apacke.spark.SparkContext object GlueApp { def main(sysArgs: Array[String]): Unit = { val spark: SparkContext = new SparkContext() val glueContext: GlueContext = new GlueContext(spark) val df = glueContext.getCatalogSource("<your_database_name>", "<your_table_name>", additionalOptions = additionalOptions) .getDataFrame() } }

Exemple : insertion d'un DataFrame dans une table Delta Lake dans Amazon S3 à l'aide du catalogue de données AWS Glue

Cet exemple insère des données dans la table Delta Lake que vous avez créée dans Exemple : écriture d'une table Delta Lake sur Amazon S3 et enregistrement dans le catalogue de données AWS Glue.

Note

Cet exemple vous demande de définir le paramètre de tâche --enable-glue-datacatalog afin d'utiliser le catalogue de données AWS Glue en tant que métastore Hive Apache Spark. Pour en savoir plus, veuillez consulter la section Paramètres des tâches AWS Glue.

Python

Pour cet exemple, utilisez la méthode write_data_frame.from_catalog.

# Example: Insert into a Delta Lake table in S3 using Glue Data Catalog from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext() glueContext = GlueContext(sc) glueContext.write_data_frame.from_catalog( frame=dataFrame, database="<your_database_name>", table_name="<your_table_name>", additional_options=additional_options )
Scala

Pour cet exemple, utilisez la méthode getCatalogSink.

// Example: Insert into a Delta Lake table in S3 using Glue Data Catalog import com.amazonaws.services.glue.GlueContext import org.apacke.spark.SparkContext object GlueApp { def main(sysArgs: Array[String]): Unit = { val spark: SparkContext = new SparkContext() val glueContext: GlueContext = new GlueContext(spark) glueContext.getCatalogSink("<your_database_name>", "<your_table_name>", additionalOptions = additionalOptions) .writeDataFrame(dataFrame, glueContext) } }

Exemple : lecture d'une table Delta Lake depuis Amazon S3 à l'aide de l'API Spark

Cet exemple lit une table Delta Lake depuis Amazon S3 à l'aide de l'API Spark.

Python
# Example: Read a Delta Lake table from S3 using a Spark DataFrame dataFrame = spark.read.format("delta").load("s3://<s3path/>")
Scala
// Example: Read a Delta Lake table from S3 using a Spark DataFrame val dataFrame = spark.read.format("delta").load("s3://<s3path/>")

Exemple : écriture d'une table Delta Lake sur Amazon S3 à l'aide de Spark

Cet exemple écrit une table Delta Lake sur Amazon S3 à l'aide de Spark.

Python
# Example: Write a Delta Lake table to S3 using a Spark DataFrame dataFrame.write.format("delta") \ .options(**additional_options) \ .mode("overwrite") \ .partitionBy("<your_partitionkey_field>") .save("s3://<s3Path>")
Scala
// Example: Write a Delta Lake table to S3 using a Spark DataFrame dataFrame.write.format("delta") .options(additionalOptions) .mode("overwrite") .partitionBy("<your_partitionkey_field>") .save("s3://<s3path/>")

Exemple : lecture et écriture d'une table Delta Lake avec contrôle des autorisations de Lake Formation

Cet exemple lit et écrit dans une table Delta Lake avec contrôle des autorisations de Lake Formation.

  1. Créez une table Delta et enregistrez-la dans Lake Formation

    1. Pour activer le contrôle des autorisations de Lake Formation, vous devez d'abord enregistrer le chemin d'accès Amazon S3 de la table sur Lake Formation. Pour plus d'informations, consultez la rubrique Enregistrement d'un emplacement Amazon S3. Vous pouvez l'enregistrer depuis la console Lake Formation ou à l'aide d'AWS CLI :

      aws lakeformation register-resource --resource-arn arn:aws:s3:::<s3-bucket>/<s3-folder> --use-service-linked-role --region <REGION>

      Une fois que vous avez enregistré un emplacement Amazon S3, toute table AWS Glue pointant vers cet emplacement (ou l'un de ses emplacements enfants) renverra la valeur du paramètre IsRegisteredWithLakeFormation comme vraie dans l'appel GetTable.

    2. Créez une table Delta qui pointe vers le chemin Amazon S3 enregistré via Spark :

      Note

      Voici des exemples Python.

      dataFrame.write \ .format("delta") \ .mode("overwrite") \ .partitionBy("<your_partitionkey_field>") \ .save("s3://<the_s3_path>")

      Une fois les données écrites sur Amazon S3, utilisez le Crawler AWS Glue pour créer une nouvelle table de catalogue Delta. Pour plus d'informations, consultez la section Présentation de la prise en charge native de la table de Delta Lake avec les Crawlers AWS Glue.

      Vous pouvez également créer la table manuellement via l'API CreateTable AWS Glue.

  2. Accordez à Lake Formation l'autorisation d'accéder au rôle IAM AWS Glue. Vous pouvez accorder des autorisations depuis la console Lake Formation ou utiliser la CLI AWS. Pour plus d'informations, consultez la rubrique Octroi d'autorisations de table via la console Lake Formation et la méthode de ressource nommée

  3. Lisez la table Delta enregistrée dans Lake Formation. Le code est le même que celui de la lecture d'une table Delta non enregistrée. Notez que le rôle IAM de la tâche AWS Glue doit disposer de l'autorisation SELECT pour que la lecture réussisse.

    # Example: Read a Delta Lake table from Glue Data Catalog df = glueContext.create_data_frame.from_catalog( database="<your_database_name>", table_name="<your_table_name>", additional_options=additional_options )
  4. Écrire dans une table Delta enregistrée dans Lake Formation. Le code est le même que celui de l'écriture dans une table Delta non enregistrée. Notez que le rôle IAM de la tâche AWS Glue doit disposer de l'autorisation SUPER pour que l'écriture réussisse.

    Par défaut, AWS Glue utilise Append comme saveMode. Vous pouvez le modifier en définissant l'option saveMode dans additional_options. Pour plus d'informations sur la prise en charge du mode SaveMode dans les tables Delta, consultez Écrire dans une table.

    glueContext.write_data_frame.from_catalog( frame=dataFrame, database="<your_database_name>", table_name="<your_table_name>", additional_options=additional_options )