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]=1717200000FILTER_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 |
|---|---|---|
|
String |
Obligatoire. |
|
Map |
Met en correspondance les opérateurs logiques avec API-specific la syntaxe. |
|
String |
DateTime modèle de format ou |
|
Booléen |
Spécifie s'il faut supprimer les guillemets environnants des valeurs d'entrée. Valeur par défaut : |
|
Objet |
Configuration de gestion BETWEEN par défaut. |
|
Objet |
Réglages spécifiques au |
FilterStringConfiguration propriétés
Le tableau suivant décrit les propriétés du FILTER_STRING mode :
Propriété |
Type |
Description |
|---|---|---|
|
String |
Obligatoire. Clé de paramètre de requête (par exemple, « recherche » ou « filtre »). |
|
Booléen |
Spécifie s'il faut placer la chaîne et DateTime les valeurs entre guillemets. |
|
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 |
|---|---|---|
|
QUERY_PARAMS |
Modèle clé pour la limite basse. Supporte les |
|
QUERY_PARAMS |
Modèle clé pour High Bound. Omettez de supprimer la limite supérieure. |
|
CHAÎNE_FILTRE |
Modèle avec |
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: truedans 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.