View a markdown version of this page

Lecture depuis une API REST - AWS Glue

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Lecture depuis une API REST

Après avoir enregistré une API REST ConnectionType et créé une AWS Glue connexion, vous pouvez lire les données de l'API REST dans vos tâches AWS Glue ETL. Grâce à cette connexion, vous pouvez traiter des données d'API REST externes en même temps que d'autres sources au cours de la même tâche. Vous avez besoin du nom de la connexion et du nom de l'entité pour lire les données.

L'exemple suivant montre comment lire à partir d'une source de données d'API REST à l'aide de Python :

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

Filtrage des données

Vous pouvez envoyer les prédicats de filtre vers le bas vers l'API REST source afin de réduire la quantité de données transférées. Le connecteur REST API prend en charge deux modes de filtrage :

  • QUERY_PARAMS — Chaque filtre devient un paramètre de requête d'URL distinct. Par exemple : ?created[gte]=1704067200&created[lte]=1717200000

  • FILTER_STRING — Tous les filtres sont combinés en un seul paramètre de requête. Par exemple : ?search=status eq "ACTIVE" and lastUpdated gt "2024-01-01"

Pour appliquer un prédicat de filtre à votre tâche AWS Glue ETL, utilisez l'option de FILTER_PREDICATE connexion :

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 propriétés

Configurez le comportement de filtrage dans votre ConnectionType enregistrement à l'aide de l'FilterConfigurationobjet. Le tableau suivant décrit les propriétés disponibles :

Propriété

Type

Description

FilterMode

String

Obligatoire. QUERY_PARAMSouFILTER_STRING.

OperatorMappings

Map

Met en correspondance les opérateurs logiques avec API-specific la syntaxe.

DateTimeFormat

String

DateTime modèle de format ouEPOCH_SECONDS/EPOCH_MILLIS.

StripQuotes

Booléen

Spécifie s'il faut supprimer les guillemets environnants des valeurs d'entrée. Valeur par défaut : true.

BetweenConfiguration

Objet

Configuration de gestion BETWEEN par défaut.

FilterStringConfiguration

Objet

Réglages spécifiques au FILTER_STRING mode.

FilterStringConfiguration propriétés

Le tableau suivant décrit les propriétés du FILTER_STRING mode :

Propriété

Type

Description

FilterStringKey

String

Obligatoire. Clé de paramètre de requête (par exemple, « recherche » ou « filtre »).

QuoteStringValues

Booléen

Spécifie s'il faut placer la chaîne et DateTime les valeurs entre guillemets.

QuoteCharacter

String

Citer un personnage. Valeur par défaut : "

BetweenConfiguration propriétés

Le tableau suivant décrit les propriétés de gestion BETWEEN :

Propriété

Mode

Description

LowBoundKey

QUERY_PARAMS

Modèle clé pour la limite basse. Supporte les {FIELD} espaces réservés.

HighBoundKey

QUERY_PARAMS

Modèle clé pour High Bound. Omettez de supprimer la limite supérieure.

Template

CHAÎNE_FILTRE

Modèle avec{FIELD},{LOW}, {HIGH} espaces réservés.

Opérateurs pris en charge

Les opérateurs suivants sont pris en charge dans les prédicats de filtre : EQUAL_TOGREATER_THAN,LESS_THAN,GREATER_THAN_OR_EQUAL_TO,LESS_THAN_OR_EQUAL_TO,NOT_EQUAL_TO,CONTAINS,, BETWEENAND,OR.

Field-level annule

Vous pouvez configurer le comportement du filtre par champ à l'aide FilterOverrides de la définition du schéma. Les propriétés de remplacement suivantes sont disponibles :

  • FieldName— Remplacez le nom du champ utilisé dans la sortie du filtre.

  • OperatorMappings— Field-level l'opérateur annule.

  • BetweenConfiguration— Per-field ENTRE override.

  • DateTimeFormat— Per-field DateTime remplacement du format.

Exemple : mode QUERY_PARAMS

L'exemple suivant montre une FilterConfiguration API REST qui utilise des paramètres de requête avec une notation entre crochets pour les opérateurs et des horodatages d'époque pour les valeurs de date :

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

Avec cette configuration, un filtre d'entrée created >= 2024-01-01 AND created <= 2024-06-01 produit la chaîne de requête URL : ?created[gte]=1704067200&created[lte]=1717200000

Exemple : mode FILTER_STRING

L'exemple suivant montre un FilterConfiguration pour une API REST qui utilise un seul paramètre de chaîne de filtre avec des opérateurs remplis d'espaces :

"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": "\"" } }

Avec cette configuration, un filtre d'entrée status = "ACTIVE" AND lastUpdated > 2024-01-01T00:00:00.000Z produit la chaîne de requête URL : ?search=status eq "ACTIVE" and lastUpdated gt "2024-01-01T00:00:00.000Z"

Requêtes de partitionnement

Vous pouvez diviser les lectures de données en partitions parallèles entre les Spark ordinateurs afin d'améliorer le débit. Le connecteur d'API REST prend en charge le partitionnement basé sur les champs, qui divise les données en plages en fonction d'un champ spécifié.

Spark paramètres de la tâche

Les options de connexion suivantes contrôlent le comportement de partitionnement :

  • PARTITION_FIELD— Champ sur lequel partitionner. Doit être marqué IsPartitionable: true dans le schéma.

  • LOWER_BOUND— Limite inférieure incluse pour la plage de partitions.

  • UPPER_BOUND— Limite supérieure de la plage de partitions. Les partitions intermédiaires excluent cette valeur. La dernière partition l'inclut.

  • NUM_PARTITIONS— Nombre de partitions parallèles.

Field-based partitionnement

Field-based le partitionnement divise les données en plages en fonction d'un champ spécifié. L'exemple suivant partitionne les données sur le lastUpdated terrain :

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

Avec 4 partitions sur le lastUpdated terrain, l'œuvre est distribuée comme suit :

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

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

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

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

Configuration de la prise en charge des partitions dans RegisterConnectionType

Pour activer le partitionnement basé sur les champs, marquez les champs comme étant partitionnables dans la définition du schéma :

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

Les FieldDataType valeurs suivantes sont prises en charge pour le partitionnement :

  • TIMESTAMP— DateTime cloisonnement. Divise la plage en fenêtres temporelles.

  • INTEGER— Partitionnement de nombres entiers. Divise la plage en fenêtres numériques.

Note

Le connecteur combine des filtres de partition avec des filtres utilisateur à l'aide de AND. Si votre filtre contient une clause LIMIT, le connecteur ignore le partitionnement. Si la génération de partition échoue, le connecteur revient à une seule partition et la tâche est toujours terminée.