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]=1717200000FILTER_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 |
|---|---|---|
|
Zeichenfolge |
Erforderlich. |
|
Zuordnung |
Ordnet logische Operatoren der API-specific Syntax zu. |
|
Zeichenfolge |
DateTime Formatmuster oder |
|
Boolesch |
Gibt an, ob umgebende Anführungszeichen aus Eingabewerten entfernt werden sollen. Standard: |
|
Objekt |
Standardkonfiguration für die BETWEEN-Behandlung. |
|
Objekt |
|
FilterStringConfiguration Eigenschaften
In der folgenden Tabelle werden die Eigenschaften für den FILTER_STRING Modus beschrieben:
Eigenschaft |
Typ |
Description |
|---|---|---|
|
Zeichenfolge |
Erforderlich Schlüssel des Abfrageparameters (z. B. „Suchen“ oder „Filtern“). |
|
Boolesch |
Gibt an, ob Zeichenfolge und DateTime Werte in Anführungszeichen gesetzt werden sollen. |
|
Zeichenfolge |
Zeichen in Anführungszeichen setzen. Standard: |
BetweenConfiguration Eigenschaften
In der folgenden Tabelle werden die Eigenschaften der BETWEEN-Behandlung beschrieben:
Eigenschaft |
Mode |
Description |
|---|---|---|
|
QUERY_PARAMS |
Schlüsselvorlage für die Untergrenze. Unterstützt |
|
QUERY_PARAMS |
Schlüsselvorlage für High Bound. Lassen Sie es weg, um die Obergrenze zu löschen. |
|
FILTER_STRING |
Vorlage mit |
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. MussIsPartitionable: trueim 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.