Verwendung des Delta-Lake-Frameworks in AWS Glue - AWS Glue

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwendung des Delta-Lake-Frameworks in AWS Glue

AWS Glue 3.0 und höher unterstützt das Delta-Lake-Framework der Linux Foundation. Delta Lake ist ein Open-Source-Framework für Data-Lake-Speicher, mit dem Sie ACID-Transaktionen durchführen, die Verarbeitung von Metadaten skalieren und Streaming- und Batch-Datenverarbeitung vereinheitlichen können. Dieses Thema behandelt verfügbare Features zur Verwendung Ihrer Daten in AWS Glue, wenn Sie Ihre Daten in einer Delta-Lake-Tabelle transportieren oder speichern. Weitere Informationen zu Delta Lake finden Sie in der offiziellen Delta-Lake-Dokumentation.

Sie können AWS Glue verwenden, um Lese- und Schreibvorgänge für Delta-Lake-Tabellen in Amazon S3 auszuführen, oder mit Delta-Lake-Tabellen arbeiten, indem Sie den AWS Glue Data Catalog verwenden. Zusätzliche Operationen wie Einfügen, Aktualisieren und Lesen und Schreiben von Tabellenbatches werden ebenfalls unterstützt. Wenn Sie Delta-Lake-Tabellen verwenden, haben Sie auch die Möglichkeit, Methoden aus der Delta-Lake-Python-Bibliothek zu verwenden, wie z. B. DeltaTable.forPath. Weitere Informationen zur Delta-Lake-Python-Bibliothek finden Sie in der Python-Dokumentation von Delta Lake.

In der folgenden Tabelle ist die Version von Delta Lake aufgeführt, die in jeder AWS-Glue-Version enthalten ist.

AWS-Glue-Version Unterstützte Delta-Lake-Version
4,0 2.1.0
3.0 1.0.0

Weitere Informationen zu den von AWS-Glue unterstützten Data-Lake-Frameworks finden Sie unter Verwendung von Data-Lake-Frameworks mit AWS Glue-ETL-Aufträgen.

Aktivieren von Delta Lake für AWS Glue

Führen Sie die folgenden Aufgaben aus, um Delta Lake für AWS Glue zu aktivieren:

  • Geben Sie delta als Wert für den Auftragsparameter --datalake-formats an. Weitere Informationen finden Sie unter AWS Glue-Auftragsparameter.

  • Erstellen Sie einen Schlüssel mit dem Namen --conf für Ihren AWS-Glue-Auftrag und legen Sie ihn auf den folgenden Wert fest. Alternativ können Sie die folgende Konfiguration mit SparkConf in Ihrem Skript festlegen. Diese Einstellungen helfen Apache Spark bei der korrekten Handhabung von Delta-Lake-Tabellen.

    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
  • Die Unterstützung von Lake-Formation-Berechtigungen für Delta-Tabellen ist standardmäßig nur für AWS Glue 4.0 aktiviert. Für das Lesen/Schreiben in Delta-Tabellen, die bei Lake Formation registriert sind, ist keine zusätzliche Konfiguration erforderlich. Um eine registrierte Delta-Tabelle lesen zu können, muss die IAM-Rolle des AWS-Glue-Auftrags über die SELECT-Berechtigung verfügen. Um in eine registrierte Delta-Tabelle schreiben zu können, muss die IAM-Rolle des AWS-Glue-Auftrags über die SUPER-Berechtigung verfügen. Weitere Informationen zur Verwaltung von Lake-Formation-Berechtigungen finden Sie unter Granting and revoking permissions on Data Catalog resources.

Verwenden einer anderen Delta-Lake-Version

Um eine Version von Delta Lake zu verwenden, die von AWS Glue nicht unterstützt wird, geben Sie mithilfe des --extra-jars-Auftragsparameters Ihre eigenen Delta Lake JAR-Dateien an. Schließen Sie delta nicht als Wert für den Auftragsparameter --datalake-formats ein. Um die Delta-Lake-Python-Bibliothek in diesem Fall zu verwenden, müssen Sie die JAR-Dateien der Bibliothek mithilfe des --extra-py-files-Auftragsparameters angeben. Die Python-Bibliothek ist in den JAR-Dateien von Delta Lake enthalten.

Beispiel: Schreiben einer Delta Lake-Tabelle in Amazon S3 und deren Registrierung im AWS Glue Data Catalog

Das folgende AWS-Glue-ETL-Skript zeigt, wie eine Delta-Lake-Tabelle in Amazon S3 geschrieben und die Tabelle im AWS Glue Data Catalog registriert wird.

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

Beispiel: Lesen einer Delta Lake-Tabelle aus Amazon S3 mit dem AWS Glue Data Catalog

Das folgende AWS-Glue-ETL-Skript liest die Delta-Lake-Tabelle, die Sie in Beispiel: Schreiben einer Delta Lake-Tabelle in Amazon S3 und deren Registrierung im AWS Glue Data Catalog erstellt haben.

Python

Verwenden Sie für dieses Beispiel die create_data_frame.from_catalog-Methode.

# 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

Verwenden Sie für dieses Beispiel die getCatalogSource-Methode.

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

Beispiel: Einfügen eines DataFrame in eine Delta-Lake-Tabelle in Amazon S3 unter Verwendung des AWS Glue Data Catalog

In diesem Beispiel werden Daten in die Delta-Lake-Tabelle eingefügt, die Sie in Beispiel: Schreiben einer Delta Lake-Tabelle in Amazon S3 und deren Registrierung im AWS Glue Data Catalog erstellt haben.

Anmerkung

In diesem Beispiel müssen Sie den --enable-glue-datacatalog-Auftragsparameter festlegen, um den AWS Glue Data Catalog als Apache-Spark-Hive-Metaspeicher verwenden zu können. Weitere Informationen hierzu finden Sie unter AWS Glue-Auftragsparameter.

Python

Verwenden Sie für dieses Beispiel die create_data_frame.from_catalog-Methode.

# 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

Verwenden Sie für dieses Beispiel die getCatalogSink-Methode.

// 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) } }

Beispiel: Lesen einer Delta-Lake-Tabelle aus Amazon S3 mit der Spark-API

In diesem Beispiel wird mit der Spark-API eine Delta-Lake-Tabelle aus Amazon S3 gelesen.

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/>")

Beispiel: Schreiben einer Delta-Lake-Tabelle in Amazon S3 mit Spark

In diesem Beispiel wird eine Delta-Lake-Tabelle mit Spark in Amazon S3 geschrieben.

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/>")

Beispiel: Lesen und Schreiben einer Delta-Lake-Tabelle mit Lake-Formation-Berechtigungskontrolle

In diesem Beispiel wird mit Lake-Formation-Berechtigungen in einer Delta-Lake-Tabelle gelesen und geschrieben.

  1. Erstellen einer Delta-Tabelle und Registrieren in Lake Formation

    1. Um die Lake-Formation-Berechtigungskontrolle zu aktivieren, müssen Sie zunächst den Amazon-S3-Tabellenpfad auf Lake Formation registrieren. Weitere Informationen finden Sie unter Registrieren eines Amazon-S3-Speicherorts. Sie können ihn entweder über die Lake-Formation-Konsole oder über die AWS CLI registrieren:

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

      Sobald Sie einen Amazon-S3-Speicherort registriert haben, gibt jede AWS-Glue-Tabelle, die auf den Speicherort (oder einen seiner untergeordneten Speicherorte) verweist, den Wert für den Parameter IsRegisteredWithLakeFormation im GetTable Aufruf als true zurück.

    2. Erstellen einer Delta-Tabelle, die über Spark auf den registrierten Amazon-S3-Pfad verweist:

      Anmerkung

      Im Folgenden sind Python-Beispiele aufgeführt.

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

      Nachdem die Daten in Amazon S3 geschrieben wurden, verwenden Sie den AWS-Glue-Crawler, um eine neue Delta-Katalogtabelle zu erstellen. Weitere Informationen finden Sie unter Einführung der nativen Delta-Lake-Tabellenunterstützung mit AWS-Crawlern.

      Sie können die Tabelle auch manuell über die AWS Glue CreateTable API erstellen.

  2. Erteilen Sie Lake Formation die Berechtigung für die IAM-Rolle des AWS-Glue-Auftrags. Sie können Berechtigungen entweder über die Lake-Formation-Konsole oder über die AWS CLI gewähren. Weitere Informationen finden Sie unter Granting table permissions using the Lake Formation console and the named resource method.

  3. Lesen der in Lake Formation registrierten Delta-Tabelle. Der Code entspricht dem Lesen einer nicht registrierten Delta-Tabelle. Beachten Sie, dass die IAM-Rolle des AWS-Glue-Auftrags über die SELECT-Berechtigung verfügen muss, damit der Lesevorgang erfolgreich ist.

    # 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. Schreiben in eine in Lake Formation registrierte Delta-Tabelle. Der Code entspricht dem Schreiben in eine nicht registrierte Delta-Tabelle. Beachten Sie, dass die IAM-Rolle des AWS-Glue-Auftrags über die SUPER-Berechtigung verfügen muss, damit der Schreibvorgang erfolgreich ist.

    Standardmäßig verwendet AWS Glue Append als saveMode. Sie können das ändern, indem Sie die saveMode-Option in additional_options einstellen. Informationen zur saveMode-Unterstützung in Delta-Tabellen finden Sie unter Write to a table.

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