Expressions - AWS Data Pipeline

AWS Data Pipeline n'est plus disponible pour les nouveaux clients. Les clients existants de AWS Data Pipeline peut continuer à utiliser le service normalement. En savoir plus

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.

Expressions

Les expressions vous permettent de partager une valeur entre objets associés. Les expressions sont traitées par le service web AWS Data Pipeline lors de l'exécution, en s'assurant que toutes les expressions sont remplacées par la valeur de l'expression.

Les expressions sont délimitées par : « #{ » et « } ». Vous pouvez utiliser une expression dans n'importe quel objet de définition de pipeline où une chaîne est légale. Si un emplacement est une référence ou est de type ID, NAME, TYPE, SPHERE, sa valeur n'est pas évaluée et il est utilisé tel quel.

L'expression suivante appelle l'une des fonctions AWS Data Pipeline. Pour plus d'informations, consultez Evaluation d'expression.

#{format(myDateTime,'YYYY-MM-dd hh:mm:ss')}

Référencement des champs et des objets

Les expressions peuvent utiliser les champs de l'objet actuel où l'expression existe, ou les champs d'un autre objet qui est lié par une référence.

Le format d'emplacement se compose de l'heure de création suivie par l'heure de création d'objet, par exemple : @S3BackupLocation_2018-01-31T11:05:33.

Vous pouvez également référencer l'ID d'emplacement exact spécifié dans la définition de pipeline, comme l'ID de l'emplacement de sauvegarde Amazon S3. Pour référencer l'ID d'emplacement, utilisez #{parent.@id}.

Dans l'exemple suivant, le champ filePath fait référence au champ id du même objet pour former un nom de fichier. La valeur de filePath correspond à « s3://mybucket/ExampleDataNode.csv ».

{ "id" : "ExampleDataNode", "type" : "S3DataNode", "schedule" : {"ref" : "ExampleSchedule"}, "filePath" : "s3://mybucket/#{parent.@id}.csv", "precondition" : {"ref" : "ExampleCondition"}, "onFail" : {"ref" : "FailureNotify"} }

Pour utiliser un champ qui existe sur un autre objet lié par une référence, utilisez le mot clé node. Ce mot clé n'est disponible qu'avec les objets d'alarme (alarm) et de condition préalable (precondition).

Dans l'exemple précédent, une expression d'un objet SnsAlarm peut faire référence à la plage de dates et à la plage d'heures d'un objet Schedule, car S3DataNode fait référence aux deux.

En particulier, le champ message d'un FailureNotify peut utiliser les champs liés à l'exécution @scheduledStartTime et @scheduledEndTime d'ExampleSchedule, car le champ onFail d'ExampleDataNode fait référence à FailureNotify et que son champ schedule fait référence à ExampleSchedule.

{ "id" : "FailureNotify", "type" : "SnsAlarm", "subject" : "Failed to run pipeline component", "message": "Error for interval #{node.@scheduledStartTime}..#{node.@scheduledEndTime}.", "topicArn":"arn:aws:sns:us-east-1:28619EXAMPLE:ExampleTopic" },
Note

Vous pouvez créer des pipelines ayant des dépendances, telles que les tâches de votre pipeline qui dépendent du travail d'autres systèmes ou tâches. Si votre pipeline nécessite certaines ressources, ajoutez ces dépendances au pipeline à l'aide de conditions préalables que vous associez à des nœuds de données et à des tâches. Cette étape rend vos pipelines plus faciles à déboguer et plus résistants. De plus, conservez vos dépendances au sein d'un seul pipeline chaque fois que possible, car la résolution des problèmes de pipeline est difficile.

Expressions imbriquées

AWS Data Pipeline vous permet d'imbriquer des valeurs pour créer des expressions plus complexes. Par exemple, pour effectuer un calcul de temps (soustraire 30 minutes de scheduledStartTime) et mettre en forme le résultat à utiliser dans une définition de pipeline, vous pouvez utiliser l'expression suivante dans une activité :

#{format(minusMinutes(@scheduledStartTime,30),'YYYY-MM-dd hh:mm:ss')}

et à l'aide du préfixe node si l'expression fait une partie d'un SnsAlarm ou d'un Precondition :

#{format(minusMinutes(node.@scheduledStartTime,30),'YYYY-MM-dd hh:mm:ss')}

Listes

Les expressions peuvent être évaluées sur les listes et les fonctions sur les listes. Par exemple, supposons que la liste soit définie comme suit : "myList":["one","two"]. Si cette liste est utilisée dans l'expression#{'this is ' + myList}, il évaluera les["this is one", "this is two"]. Si vous avez deux listes, Data Pipeline les aplatit lors de leur évaluation. Par exemple, si myList1 est défini comme [1,2] et myList2 comme [3,4], l'expression [#{myList1}, #{myList2}] est analysée comme [1,2,3,4].

Expression de nœud

AWS Data Pipeline utilise l'expression #{node.*} dans SnsAlarm ou PreCondition pour créer une référence arrière à l'objet parent d'un composant du pipeline. Comme SnsAlarm et PreCondition sont référencés depuis une activité ou une ressource sans référence arrière à leur encontre, node offre le moyen de faire référence au référent. Par exemple, la définition de pipeline suivante illustre comment une notification d'échec peut utiliser node pour effectuer une référence à son parent, dans ce cas ShellCommandActivity, et inclure les heures de début et de fin planifiées du parent dans le message SnsAlarm. La référence scheduledStartTime sur ShellCommandActivity ne nécessite pas le préfixe node, car scheduledStartTime fait référence à lui-même.

Note

Les champs précédés par le signe AT (@) indiquent que ces champs sont des champs liés à l'exécution.

{ "id" : "ShellOut", "type" : "ShellCommandActivity", "input" : {"ref" : "HourlyData"}, "command" : "/home/userName/xxx.sh #{@scheduledStartTime} #{@scheduledEndTime}", "schedule" : {"ref" : "HourlyPeriod"}, "stderr" : "/tmp/stderr:#{@scheduledStartTime}", "stdout" : "/tmp/stdout:#{@scheduledStartTime}", "onFail" : {"ref" : "FailureNotify"}, }, { "id" : "FailureNotify", "type" : "SnsAlarm", "subject" : "Failed to run pipeline component", "message": "Error for interval #{node.@scheduledStartTime}..#{node.@scheduledEndTime}.", "topicArn":"arn:aws:sns:us-east-1:28619EXAMPLE:ExampleTopic" },

AWS Data Pipeline prend en charge les références transitives pour les champs définis par l'utilisateur, mais pas pour les champs liés à l'exécution. Une référence transitive est une référence entre deux composants d'un pipeline qui dépend d'un autre composant de pipeline comme intermédiaire. L'exemple suivant montre une référence à un champ transitif défini par l'utilisateur et une référence à un champ lié à l'exécution non transitif, les deux étant valides. Pour plus d'informations, consultez Champs définis par l'utilisateur.

{ "name": "DefaultActivity1", "type": "CopyActivity", "schedule": {"ref": "Once"}, "input": {"ref": "s3nodeOne"}, "onSuccess": {"ref": "action"}, "workerGroup": "test", "output": {"ref": "s3nodeTwo"} }, { "name": "action", "type": "SnsAlarm", "message": "S3 bucket '#{node.output.directoryPath}' succeeded at #{node.@actualEndTime}.", "subject": "Testing", "topicArn": "arn:aws:sns:us-east-1:28619EXAMPLE:ExampleTopic", "role": "DataPipelineDefaultRole" }

Evaluation d'expression

AWS Data Pipeline fournit un ensemble de fonctions que vous pouvez utiliser pour calculer la valeur d'un champ. L'exemple suivant utilise la fonction makeDate pour définir le champ startDateTime d'un objet Schedule avec la valeur "2011-05-24T0:00:00" (GMT/UTC).

"startDateTime" : "makeDate(2011,5,24)"