Ausführen von ETL-Jobs auf Amazon S3 S3-Tabellen mit AWS Glue - Amazon Simple Storage Service

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.

Ausführen von ETL-Jobs auf Amazon S3 S3-Tabellen mit AWS Glue

AWS Glue ist ein serverloser Datenintegrationsdienst, der es Analytics-Benutzern erleichtert, Daten aus mehreren Quellen zu ermitteln, aufzubereiten, zu verschieben und zu integrieren. Sie können AWS Glue Jobs verwenden, um ETL-Pipelines (Extrahieren, Transformieren und Laden) auszuführen, um Daten in Ihre Data Lakes zu laden. Weitere Informationen zu finden Sie AWS Glue unter Was ist AWS Glue? im AWS Glue Entwicklerhandbuch.

Ein AWS Glue Job kapselt ein Skript, das eine Verbindung zu Ihren Quelldaten herstellt, sie verarbeitet und sie dann in Ihr Datenziel schreibt. In der Regel führt ein Auftrag Extraktions-, Transformations- und Ladeskripts (Extract, Transform and Load, ETL) aus. Jobs können Skripts ausführen, die für Apache Spark Laufzeitumgebungen entwickelt wurden. Sie können Auftragsausführungen überwachen, um mehr über Laufzeitmetriken wie Bearbeitungsstatus, Dauer und Startzeit zu erfahren.

Sie können AWS Glue Jobs verwenden, um Daten in Ihren S3-Tabellen zu verarbeiten, indem Sie über die Integration mit AWS Analytics-Services eine Verbindung zu Ihren Tabellen herstellen, oder Sie können eine direkte Verbindung über den Amazon Iceberg REST S3-Tabellen-Endpunkt oder den Amazon S3 S3-Tabellenkatalog für herstellenApache Iceberg. Dieses Handbuch behandelt die grundlegenden Schritte für den Einstieg in die Verwendung von AWS Glue S3-Tabellen, darunter:

Anmerkung

S3 Tables wird in AWS Glue Version 5.0 oder höher unterstützt.

Voraussetzungen

Bevor Sie Tabellen aus einem AWS Glue Job abfragen können, müssen Sie eine IAM-Rolle konfigurieren, mit der der Job ausgeführt werden AWS Glue kann, und den Amazon S3 S3-Tabellenkatalog für Apache Iceberg JAR in einen S3-Bucket hochladen, auf den bei der Ausführung des Jobs zugegriffen werden AWS Glue kann.

  • Sie integrieren Ihre Tabellen-Buckets in AWS -Analytikdienste.

  • Erstellen Sie eine IAM-Rolle für. AWS Glue

    • Hängen Sie die AmazonS3TablesFullAccess verwaltete Richtlinie an die Rolle an.

    • Hängen Sie die AmazonS3FullAccess verwaltete Richtlinie an die Rolle an.

  • (Optional) Wenn Sie den Amazon S3 S3-Tabellenkatalog für verwenden, müssen Apache Iceberg Sie den Client-Katalog herunterladen JAR und in einen S3-Bucket hochladen.

    Der Katalog wird heruntergeladen JAR
    1. Suchen Sie auf Maven Central nach der neuesten Version. Sie können die JAR von Maven Central mit Ihrem Browser oder mit dem folgenden Befehl herunterladen. Stellen Sie sicher, dass Sie die version number durch die neueste Version ersetzen.

      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. Laden Sie die heruntergeladene Datei JAR in einen S3-Bucket hoch, auf den Ihre AWS Glue IAM-Rolle zugreifen kann. Sie können den folgenden AWS CLI Befehl verwenden, um das JAR hochzuladen. Stellen Sie sicher, dass Sie die version number durch die neueste Version und die bucket name und path durch Ihre eigene ersetzen.

      aws s3 cp s3-tables-catalog-for-iceberg-runtime-0.1.5.jar s3://amzn-s3-demo-bucket/jars/

Erstellen Sie ein Skript, um eine Verbindung zu Tabellen-Buckets herzustellen

Um auf Ihre Tabellendaten zuzugreifen, wenn Sie einen AWS Glue ETL-Job ausführen, konfigurieren Sie eine Spark Sitzung für Apache Iceberg die Verbindung zu Ihrem S3-Tabellen-Bucket. Sie können ein vorhandenes Skript ändern, um eine Verbindung zu Ihrem Tabellen-Bucket herzustellen, oder ein neues Skript erstellen. Weitere Informationen zum Erstellen von AWS Glue Skripten finden Sie unter Tutorial: Ein AWS Glue for Spark-Skript schreiben im AWS Glue Entwicklerhandbuch.

Sie können die Sitzung so konfigurieren, dass sie über eine der folgenden Zugriffsmethoden für S3-Tabellen eine Verbindung zu Ihren Tabellen-Buckets herstellt:

  • Integration von S3-Tabellen mit AWS Analysediensten

  • Iceberg RESTEndpunkt Amazon S3 S3-Tabellen

  • Amazon S3 S3-Tabellenkatalog für Apache Iceberg

Wählen Sie aus den folgenden Zugriffsmethoden, um Anweisungen zur Einrichtung und Konfigurationsbeispiele einzusehen.

AWS analytics services integration

Als Voraussetzung für das Abfragen von Tabellen mit oder Spark unter AWS Glue Verwendung der AWS Analytics Services-Integration müssen Sie Ihre Tabellen-Buckets in AWS Analytics-Services integrieren

Sie können die Verbindung zu Ihrem Tabellen-Bucket über eine Spark Sitzung in einem Job oder mit AWS Glue Studio Magics in einer interaktiven Sitzung konfigurieren. Um die folgenden Beispiele zu verwenden, ersetzen Sie die durch die placeholder values Informationen für Ihren eigenen Tabellen-Bucket.

Verwenden Sie ein PySpark Skript

Verwenden Sie den folgenden Codeausschnitt in einem PySpark Skript, um einen AWS Glue Job zu konfigurieren, der mithilfe der Integration eine Verbindung zu Ihrem Tabellen-Bucket herstellt.

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()
Verwenden Sie eine interaktive Sitzung AWS Glue

Wenn Sie eine interaktive Notebook-Sitzung mit AWS Glue 5.0 verwenden, geben Sie vor der Codeausführung dieselben Konfigurationen mithilfe von %%configure Magic in einer Zelle an.

%%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 Eisberg, Ruhe. endpoint

Sie können die Verbindung zu Ihrem Table-Bucket über eine Spark Sitzung in einem Job oder mit AWS Glue Studio Magics in einer interaktiven Sitzung konfigurieren. Um die folgenden Beispiele zu verwenden, ersetzen Sie die durch die placeholder values Informationen für Ihren eigenen Tabellen-Bucket.

Verwenden Sie ein PySpark Skript

Verwenden Sie den folgenden Codeausschnitt in einem PySpark Skript, um einen AWS Glue Job so zu konfigurieren, dass er über den Endpunkt eine Verbindung zu Ihrem Tabellen-Bucket herstellt.

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()
Verwenden Sie eine interaktive Sitzung AWS Glue

Wenn Sie eine interaktive Notebook-Sitzung mit AWS Glue 5.0 verwenden, geben Sie vor der Codeausführung dieselben Konfigurationen mithilfe von %%configure Magic in einer Zelle an. Ersetzen Sie die Platzhalterwerte durch die Informationen für Ihren eigenen Tabellen-Bucket.

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

Als Voraussetzung für die Verbindung zu Tabellen mithilfe des Amazon S3 S3-Tabellenkatalogs müssen Apache Iceberg Sie zunächst die neueste Katalog-JAR-Datei herunterladen und in einen S3-Bucket hochladen. Wenn Sie dann Ihren Job erstellen, fügen Sie den Pfad zum Client-Katalog JAR als speziellen Parameter hinzu. Weitere Informationen zu Job-Parametern finden Sie im AWS Glue Developer Guide unter Spezielle Parameter AWS Glue, die in AWS Glue Jobs verwendet werden.

Sie können die Verbindung zu Ihrem Tabellen-Bucket über eine Spark Sitzung in einem Job oder mithilfe von AWS Glue Studio Magics in einer interaktiven Sitzung konfigurieren. Um die folgenden Beispiele zu verwenden, ersetzen Sie die durch die placeholder values Informationen für Ihren eigenen Tabellen-Bucket.

Verwenden Sie ein PySpark Skript

Verwenden Sie den folgenden Codeausschnitt in einem PySpark Skript, um einen AWS Glue Job für die Verbindung mit Ihrem Tabellen-Bucket mithilfe von zu konfigurieren. JAR Ersetzen Sie die Platzhalterwerte durch die Informationen für Ihren eigenen Tabellen-Bucket.

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()
Verwenden Sie eine interaktive Sitzung AWS Glue

Wenn Sie eine interaktive Notebook-Sitzung mit AWS Glue 5.0 verwenden, geben Sie vor der Codeausführung dieselben Konfigurationen mithilfe von %%configure Magic in einer Zelle an. Ersetzen Sie die Platzhalterwerte durch die Informationen für Ihren eigenen Tabellen-Bucket.

%%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"}

Beispielskripte

Die folgenden PySpark Beispielskripten können verwendet werden, um das Abfragen von S3-Tabellen mit einem AWS Glue Job zu testen. Diese Skripten stellen eine Verbindung zu Ihrem Tabellen-Bucket her und führen Abfragen aus, um: einen neuen Namespace zu erstellen, eine Beispieltabelle zu erstellen, Daten in die Tabelle einzufügen und die Tabellendaten zurückzugeben. Um die Skripten zu verwenden, ersetzen Sie sie durch die placeholder values Informationen für Ihren eigenen Tabellen-Bucket.

Wählen Sie je nach Ihrer Zugriffsmethode für S3-Tabellen aus den folgenden Skripten aus.

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

Erstellen Sie einen AWS Glue Job, der Tabellen abfragt

Die folgenden Verfahren zeigen, wie Sie AWS Glue Jobs einrichten, die eine Verbindung zu Ihren S3-Tabellen-Buckets herstellen. Sie können dies mithilfe der AWS CLI oder mithilfe der Konsole mit dem AWS Glue Studio Skripteditor tun. Weitere Informationen finden Sie AWS Glue im AWS Glue Benutzerhandbuch unter Authoring-Jobs.

Das folgende Verfahren zeigt, wie Sie mit dem AWS Glue Studio Skript-Editor einen ETL-Job erstellen, der Ihre S3-Tabellen abfragt.

  1. Öffnen Sie die AWS Glue Konsole unter https://console.aws.amazon.com/glue/.

  2. Wählen Sie im Navigationsbereich die Option ETL-Jobs aus.

  3. Wählen Sie Skripteditor und dann Skript hochladen und laden Sie das Skript hoch, das PySpark Sie für die Abfrage von S3-Tabellen erstellt haben.

  4. Wählen Sie die Registerkarte Jobdetails und geben Sie Folgendes für Basiseigenschaften ein.

    • Geben Sie unter Name einen Namen für den Job ein.

    • Wählen Sie unter IAM-Rolle die Rolle aus, für AWS Glue die Sie erstellt haben.

  5. (Optional) Wenn Sie die Zugriffsmethode Amazon S3 Tables Catalog als Apache Iceberg Zugriffsmethode verwenden, erweitern Sie Erweiterte Eigenschaften und geben Sie für Dependent JARs path als Voraussetzung die S3-URI der Client-Katalog-Jar ein, die Sie in einen S3-Bucket hochgeladen haben. Zum Beispiel s3://amzn-s3-demo-bucket1/jars/s3- tables-catalog-for-iceberg -runtime- .jar 0.1.5

  6. Wählen Sie Speichern, um den Job zu erstellen.

  7. Wählen Sie „Ausführen“, starten Sie den Job und überprüfen Sie den Jobstatus auf der Registerkarte „Ausführungen“.

Das folgende Verfahren zeigt, wie Sie mit dem AWS CLI einen ETL-Job erstellen, der Ihre S3-Tabellen abfragt. Um die Befehle zu verwenden, ersetzen Sie die placeholder values durch Ihre eigenen.

  1. Erstellen Sie einen AWS Glue Job.

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

    (Optional) Wenn Sie die Apache Iceberg Zugriffsmethode Amazon S3 Tables Catalog für den Zugriff verwenden, fügen Sie den Client-Katalog JAR --default-arguments mithilfe des --extra-jars Parameters hinzu. Ersetzen Sie die input placeholders durch Ihre eigene, wenn Sie den Parameter hinzufügen.

    "--extra-jars": "s3://amzn-s3-demo-bucket/jar-path/s3-tables-catalog-for-iceberg-runtime-0.1.5.jar"
  2. Starte deinen Job.

    aws glue start-job-run \ --job-name etl-tables-job
  3. Um Ihren Jobstatus zu überprüfen, kopieren Sie die Run-ID aus dem vorherigen Befehl und geben Sie sie in den folgenden Befehl ein.

    aws glue get-job-run --job-name etl-tables-job \ --run-id jr_ec9a8a302e71f8483060f87b6c309601ea9ee9c1ffc2db56706dfcceb3d0e1ad