View a markdown version of this page

Aus einer REST-API lesen - 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.

Aus einer REST-API lesen

Nachdem Sie eine REST-API registriert ConnectionType und eine AWS Glue Verbindung hergestellt haben, können Sie Daten aus der REST-API in Ihren AWS Glue ETL-Jobs lesen. Mit dieser Verbindung können Sie externe REST-API-Daten zusammen mit anderen Quellen im selben Job verarbeiten. Sie benötigen den Verbindungsnamen und den Entitätsnamen, um Daten zu lesen.

Das folgende Beispiel zeigt, wie mit Python aus einer REST-API-Datenquelle gelesen wird:

rest_read = glueContext.create_dynamic_frame.from_options( connection_type="rest", connection_options={ "connectionName": "connection-name", "ENTITY_NAME": "entity-name", "CONNECTION_TYPE": "REST-connection-type" } )

Filtern von Daten

Sie können Filterprädikate auf die Quell-REST-API übertragen, um die übertragene Datenmenge zu reduzieren. Der REST-API-Connector unterstützt zwei Filtermodi:

  • QUERY_PARAMS — Jeder Filter wird zu einem separaten URL-Abfrageparameter. Beispiel: ?created[gte]=1704067200&created[lte]=1717200000

  • FILTER_STRING — Alle Filter werden zu einem einzigen Abfrageparameter zusammengefasst. Beispiel: ?search=status eq "ACTIVE" and lastUpdated gt "2024-01-01"

Verwenden Sie die Verbindungsoption, um ein Filterprädikat in Ihrem AWS Glue ETL-Job anzuwenden: FILTER_PREDICATE

rest_read = glueContext.create_dynamic_frame.from_options( connection_type="rest", connection_options={ "connectionName": "connection-name", "ENTITY_NAME": "entity-name", "CONNECTION_TYPE": "REST-connection-type", "FILTER_PREDICATE": "status = \"ACTIVE\" AND lastUpdated >= \"2024-01-01T00:00:00.000Z\"" } )
FilterConfiguration Eigenschaften

Konfigurieren Sie das Filterverhalten in Ihrer ConnectionType Registrierung mithilfe des FilterConfiguration Objekts. In der folgenden Tabelle werden die verfügbaren Eigenschaften beschrieben:

Eigenschaft

Typ

Description

FilterMode

Zeichenfolge

Erforderlich. QUERY_PARAMSoderFILTER_STRING.

OperatorMappings

Zuordnung

Ordnet logische Operatoren der API-specific Syntax zu.

DateTimeFormat

Zeichenfolge

DateTime Formatmuster oderEPOCH_SECONDS/EPOCH_MILLIS.

StripQuotes

Boolesch

Gibt an, ob umgebende Anführungszeichen aus Eingabewerten entfernt werden sollen. Standard: true.

BetweenConfiguration

Objekt

Standardkonfiguration für die BETWEEN-Behandlung.

FilterStringConfiguration

Objekt

FILTER_STRINGModusspezifische Einstellungen.

FilterStringConfiguration Eigenschaften

In der folgenden Tabelle werden die Eigenschaften für den FILTER_STRING Modus beschrieben:

Eigenschaft

Typ

Description

FilterStringKey

Zeichenfolge

Erforderlich Schlüssel des Abfrageparameters (z. B. „Suchen“ oder „Filtern“).

QuoteStringValues

Boolesch

Gibt an, ob Zeichenfolge und DateTime Werte in Anführungszeichen gesetzt werden sollen.

QuoteCharacter

Zeichenfolge

Zeichen in Anführungszeichen setzen. Standard: "

BetweenConfiguration Eigenschaften

In der folgenden Tabelle werden die Eigenschaften der BETWEEN-Behandlung beschrieben:

Eigenschaft

Mode

Description

LowBoundKey

QUERY_PARAMS

Schlüsselvorlage für die Untergrenze. Unterstützt {FIELD} Platzhalter.

HighBoundKey

QUERY_PARAMS

Schlüsselvorlage für High Bound. Lassen Sie es weg, um die Obergrenze zu löschen.

Template

FILTER_STRING

Vorlage mit {FIELD} Platzhaltern{LOW},{HIGH}.

Unterstützte Operatoren

Die folgenden Operatoren werden in Filterprädikaten unterstützt:EQUAL_TO,,GREATER_THAN,LESS_THAN,GREATER_THAN_OR_EQUAL_TO,,LESS_THAN_OR_EQUAL_TO, NOT_EQUAL_TOCONTAINS,BETWEEN. AND OR

Field-level überschreibt

Sie können das Filterverhalten pro Feld mithilfe FilterOverrides der Schemadefinition konfigurieren. Die folgenden Override-Eigenschaften sind verfügbar:

  • FieldName— Überschreibt den Feldnamen, der in der Filterausgabe verwendet wird.

  • OperatorMappings— Überschreibungen durch den Field-level Operator.

  • BetweenConfiguration— Per-field BETWEEN-Überschreibung.

  • DateTimeFormat— Überschreibung des Per-field DateTime Formats.

Beispiel: QUERY_PARAMS-Modus

Das folgende Beispiel zeigt a FilterConfiguration für eine REST-API, die Abfrageparameter mit Klammernotation für Operatoren und Epochen-Zeitstempeln für Datumswerte verwendet:

"FilterConfiguration": { "FilterMode": "QUERY_PARAMS", "OperatorMappings": { "EQUAL_TO": "{FIELD}", "GREATER_THAN_OR_EQUAL_TO": "{FIELD}[gte]", "LESS_THAN_OR_EQUAL_TO": "{FIELD}[lte]" }, "DateTimeFormat": "EPOCH_SECONDS", "BetweenConfiguration": { "LowBoundKey": "{FIELD}[gte]", "HighBoundKey": "{FIELD}[lte]" } }

Bei dieser Konfiguration created >= 2024-01-01 AND created <= 2024-06-01 erzeugt ein Eingabefilter von die URL-Abfragezeichenfolge: ?created[gte]=1704067200&created[lte]=1717200000

Beispiel: FILTER_STRING-Modus

Das folgende Beispiel zeigt eine FilterConfiguration für eine REST-API, die einen einzelnen Filterzeichenfolgenparameter mit mit Leerzeichen aufgefüllten Operatoren verwendet:

"FilterConfiguration": { "FilterMode": "FILTER_STRING", "OperatorMappings": { "EQUAL_TO": " eq ", "GREATER_THAN": " gt ", "GREATER_THAN_OR_EQUAL_TO": " ge ", "LESS_THAN": " lt ", "AND": " and ", "OR": " or " }, "DateTimeFormat": "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "BetweenConfiguration": { "Template": "{FIELD} ge {LOW} and {FIELD} le {HIGH}" }, "FilterStringConfiguration": { "FilterStringKey": "search", "QuoteStringValues": true, "QuoteCharacter": "\"" } }

Bei dieser Konfiguration status = "ACTIVE" AND lastUpdated > 2024-01-01T00:00:00.000Z erzeugt ein Eingabefilter von die URL-Abfragezeichenfolge: ?search=status eq "ACTIVE" and lastUpdated gt "2024-01-01T00:00:00.000Z"

Partitionierung von Abfragen

Sie können gelesene Daten in parallele Spark Worker-Partitionen aufteilen, um den Durchsatz zu verbessern. Der REST-API-Connector unterstützt die feldbasierte Partitionierung, bei der Daten auf der Grundlage eines bestimmten Felds in Bereiche unterteilt werden.

Spark Job-Parameter

Die folgenden Verbindungsoptionen steuern das Partitionierungsverhalten:

  • PARTITION_FIELD— Feld, das partitioniert werden soll. Muss IsPartitionable: true im Schema markiert sein.

  • LOWER_BOUND— Inklusive Untergrenze für den Partitionsbereich.

  • UPPER_BOUND— Obergrenze für den Partitionsbereich. Zwischenpartitionen schließen diesen Wert aus. Die letzte Partition enthält ihn.

  • NUM_PARTITIONS— Anzahl der parallelen Partitionen.

Field-based Partitionierung

Field-based Die Partitionierung unterteilt Daten in Bereiche, die auf einem bestimmten Feld basieren. Im folgenden Beispiel werden Daten auf dem Feld partitioniertlastUpdated:

rest_read = glueContext.create_dynamic_frame.from_options( connection_type="rest", connection_options={ "connectionName": "connection-name", "ENTITY_NAME": "entity-name", "CONNECTION_TYPE": "REST-connection-type", "PARTITION_FIELD": "lastUpdated", "LOWER_BOUND": "2024-01-01T00:00:00.000Z", "UPPER_BOUND": "2024-12-31T00:00:00.000Z", "NUM_PARTITIONS": "4" } )

Bei 4 Partitionen auf dem lastUpdated Feld verteilt sich die Arbeit wie folgt:

  • Arbeiter 1: lastUpdated >= "2024-01-01" AND lastUpdated < "2024-04-01"

  • Arbeiter 2: lastUpdated >= "2024-04-01" AND lastUpdated < "2024-07-01"

  • Arbeiter 3: lastUpdated >= "2024-07-01" AND lastUpdated < "2024-10-01"

  • Arbeiter 4: lastUpdated >= "2024-10-01" AND lastUpdated <= "2024-12-31"

Konfiguration der Partitionsunterstützung in RegisterConnectionType

Um die feldbasierte Partitionierung zu aktivieren, markieren Sie Felder in der Schemadefinition als partitionierbar:

"Schema": { "lastUpdated": { "FieldDataType": "TIMESTAMP", "IsPartitionable": true } }

Die folgenden FieldDataType Werte werden für die Partitionierung unterstützt:

  • TIMESTAMP— DateTime Partitionierung. Teilt den Bereich in Zeitfenster auf.

  • INTEGER— Integer-Partitionierung. Teilt den Bereich in numerische Fenster auf.

Anmerkung

Der Connector kombiniert Partitionsfilter mit Benutzerfiltern mithilfe von AND. Wenn Ihr Filter eine LIMIT-Klausel enthält, überspringt der Connector die Partitionierung. Wenn die Partitionsgenerierung fehlschlägt, fällt der Connector auf eine einzelne Partition zurück und der Job wird trotzdem abgeschlossen.