Verwenden des XML-Formats 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.

Verwenden des XML-Formats in AWS-Glue

AWS-Glue ruft Daten aus Quellen ab und schreibt Daten an Ziele, die in verschiedenen Datenformaten gespeichert und transportiert werden. Wenn Ihre Daten im XML-Datenformat gespeichert oder transportiert werden, stellt Ihnen dieses Dokument die verfügbaren Funktionen zur Verwendung Ihrer Daten in AWS-Glue vor.

AWS-Glue unterstützt die Verwendung des XML-Formats. Dieses Format stellt hochgradig konfigurierbare, fest definierte Datenstrukturen dar, die nicht zeilen- oder spaltenbasiert sind. XML ist hochgradig standardisiert. Eine Einführung in das Format durch die Standardautorität finden Sie unter XML Essentials.

Sie können AWS-Glue verwenden, um XML-Dateien von Amazon S3 zu lesen, sowie bzip- und gzip-Archive, die XML-Dateien enthalten. Sie konfigurieren das Komprimierungsverhalten auf S3-Verbindungsparameter statt in der auf dieser Seite besprochenen Konfiguration.

Die folgende Tabelle zeigt, welche gängigen AWS-Glue-Funktionen die Option XML-Format unterstützen.

Lesen Write (Schreiben) Streaming gelesen Gruppieren von kleinen Dateien Auftrags-Lesezeichen
Unterstützt Nicht unterstützt Nicht unterstützt Unterstützt Unterstützt

Beispiel: Lesen von XML aus S3

Der XML-Reader akzeptiert einen XML-Tag-Namen. Es untersucht Elemente mit diesem Tag in seiner Eingabe, um ein Schema abzuleiten, und füllt einen DynamicFrame mit entsprechenden Werten. Die XML-Funktionalität von AWS-Glue verhält sich ähnlich wie die XML-Datenquelle für Apache Spark. Möglicherweise können Sie einen Einblick in das grundlegende Verhalten gewinnen, indem Sie diesen Reader mit der Dokumentation dieses Projekts vergleichen.

Voraussetzungen: Sie benötigen die S3-Pfade (s3path) zu den XML-Dateien oder -Ordnern, die Sie lesen möchten, sowie einige Informationen zu Ihrer XML-Datei. Sie benötigen auch das Tag für das XML-Element, das Sie lesen möchten, xmlTag.

Konfiguration: Geben Sie in Ihren Funktionsoptionen format="xml" an. Verwenden Sie in Ihrem connection_options den paths-Schlüssel, um s3path anzugeben. Sie können weiter konfigurieren, wie der Reader mit S3 in connection_options interagiert. Einzelheiten finden Sie unter Verbindungstypen und Optionen für ETL in AWS Glue: S3-Verbindungsparameter. Verwenden Sie in Ihrem format_options den rowTag-Schlüssel, um xmlTag anzugeben. Sie können weiter konfigurieren, wie der Reader mit XML-Dateien in format_options interagiert. Einzelheiten finden Sie in der XML-Konfigurationsreferenz.

Das folgende AWS-Glue-ETL-Skript zeigt den Prozess des Lesens von XML-Dateien oder -Ordnern aus S3.

Python

Verwenden Sie für dieses Beispiel die Methode create_dynamic_frame.from_options.

# Example: Read XML from S3 # Set the rowTag option to configure the reader. from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext.getOrCreate() glueContext = GlueContext(sc) dynamicFrame = glueContext.create_dynamic_frame.from_options( connection_type="s3", connection_options={"paths": ["s3://s3path"]}, format="xml", format_options={"rowTag": "xmlTag"}, )

Sie können DataFrames auch in einem Skript verwenden (pyspark.sql.DataFrame).

dataFrame = spark.read\ .format("xml")\ .option("rowTag", "xmlTag")\ .load("s3://s3path")
Scala

Verwenden Sie für dieses Beispiel die Operation getSourceWithFormat.

// Example: Read XML from S3 // Set the rowTag option to configure the reader. import com.amazonaws.services.glue.util.JsonOptions import com.amazonaws.services.glue.GlueContext import org.apache.spark.sql.SparkSession val glueContext = new GlueContext(SparkContext.getOrCreate()) val sparkSession: SparkSession = glueContext.getSparkSession object GlueApp { def main(sysArgs: Array[String]): Unit = { val dynamicFrame = glueContext.getSourceWithFormat( formatOptions=JsonOptions("""{"rowTag": "xmlTag"}"""), connectionType="s3", format="xml", options=JsonOptions("""{"paths": ["s3://s3path"], "recurse": true}""") ).getDynamicFrame() }

Sie können DataFrames auch in einem Skript verwenden (org.apache.spark.sql.DataFrame).

val dataFrame = spark.read .option("rowTag", "xmlTag") .format("xml") .load("s3://s3path“)

XML-Konfigurationsreferenz

Sie können die folgenden format_options überall verwenden, wo AWS-Glue-Bibliotheken format="xml" angibt:

  • rowTag – Gibt an, dass der XML-Tag in der Datei als Zeile zu behandeln ist. Zeilen-Tags können nicht selbstschließend sein.

    • Typ: Text, Erforderlich

  • encoding – Gibt die Zeichencodierung an. Dies kann der Name oder Alias eines von unserer Laufzeitumgebung unterstützten Zeichensatzes sein. Wir geben keine spezifischen Garantien für die Unterstützung der Codierung, aber wichtige Kodierungen sollten funktionieren.

    • Typ: Text, Standard: "UTF-8"

  • excludeAttribute – Gibt an, ob Sie Attribute in Elementen ausschließen möchten oder nicht.

    • Typ: Boolesch, Standard: false

  • treatEmptyValuesAsNulls – Gibt an, ob Leerzeichen als Nullwert behandelt werden sollen.

    • Typ: Boolesch, Standard: false

  • attributePrefix – Ein Präfix für Attribute, um sie vom Text der untergeordneten Elemente zu unterscheiden. Das Präfix wird für Feldnamen verwendet.

    • Typ: Text, Standard: "_"

  • valueTag – Das Tag, das für einen Wert verwendet wird, wenn das Element Attribute enthält, die kein untergeordnetes Element haben.

    • Typ: Text, Standard: "_VALUE"

  • ignoreSurroundingSpaces – Gibt an, ob das Leerzeichen, das die Werte umgibt, ignoriert werden soll.

    • Typ: Boolesch, Standard: false

  • withSchema – Enthält das erwartete Schema in Situationen, in denen Sie das abgeleitete Schema überschreiben möchten. Wenn Sie diese Option nicht verwenden, leitet AWS Glue das Schema aus den XML-Daten ab.

    • Typ: Text, Standard: Nicht zutreffend

    • Der Wert sollte ein JSON-Objekt sein, das ein StructType darstellt.

Geben Sie das XML-Schema manuell an

Beispiel eines manuellen XML-Schemas

Dies ist ein Beispiel für die Verwendung der Formatoption withSchema, um das Schema für XML-Daten anzugeben.

from awsglue.gluetypes import * schema = StructType([ Field("id", IntegerType()), Field("name", StringType()), Field("nested", StructType([ Field("x", IntegerType()), Field("y", StringType()), Field("z", ChoiceType([IntegerType(), StringType()])) ])) ]) datasource0 = create_dynamic_frame_from_options( connection_type, connection_options={"paths": ["s3://xml_bucket/someprefix"]}, format="xml", format_options={"withSchema": json.dumps(schema.jsonValue())}, transformation_ctx = "" )