AWS Data Pipeline ya no está disponible para nuevos clientes. Clientes actuales de AWS Data Pipeline pueden seguir utilizando el servicio con normalidad. Más información
Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Expresiones
Las expresiones le permiten compartir un valor entre objetos relacionados. El servicio web AWS Data Pipeline procesa las expresiones en tiempo de ejecución, lo que garantiza que todas las expresiones se sustituyan por el valor de la expresión.
Las expresiones están delimitadas por: "#{" y "}". Puede utilizar una expresión en cualquier objeto de definición de canalización donde una cadena sea legal. Si un slot es una referencia o de tipo ID, NAME, TYPE o SPHERE, su valor no se evalúa y se utiliza literalmente.
La siguiente expresión llama a una de las funciones de AWS Data Pipeline. Para obtener más información, consulte Evaluación de expresiones.
#{format(myDateTime,'YYYY-MM-dd hh:mm:ss')}
Objetos y campos de referencia
Las expresiones pueden utilizar campos del objeto actual en el que existe la expresión o los campos de otro objeto que está vinculado mediante una referencia.
Un formato de slot consta de una hora de creación, seguida de la hora de creación del objeto, como @S3BackupLocation_2018-01-31T11:05:33
.
También puede hacer referencia al ID de slot exacto especificado en la definición de la canalización; por ejemplo, el ID de slot de la ubicación de copia de seguridad de Amazon S3. Para hacer referencia al ID de slot, utilice #{parent.@id}
.
En el siguiente ejemplo, el campo filePath
hace referencia al campo id
en el mismo objeto para formar un nombre de archivo. El valor de filePath
se evalúa como "s3://mybucket/ExampleDataNode.csv
".
{ "id" : "ExampleDataNode", "type" : "S3DataNode", "schedule" : {"ref" : "ExampleSchedule"}, "filePath" : "s3://mybucket/#{parent.@id}.csv", "precondition" : {"ref" : "ExampleCondition"}, "onFail" : {"ref" : "FailureNotify"} }
Para utilizar un campo que existe en otro objeto vinculado mediante una referencia, utilice la palabra clave node
. Esta palabra clave solo está disponible con objetos de alarma y condición previa.
Continuando con el ejemplo anterior, una expresión de una SnsAlarm
puede hacer referencia al rango de fecha y hora de una Schedule
, porque S3DataNode
hace referencia a ambas.
En concreto, el campo message
de FailureNotify
puede utilizar los campos en tiempo de ejecución @scheduledStartTime
y @scheduledEndTime
desde ExampleSchedule
, porque el campo onFail
de ExampleDataNode
hace referencia a FailureNotify
y su campo schedule
hace referencia a 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" },
nota
Puede crear canalizaciones que tengan dependencias, como las tareas de la canalización que dependen del trabajo de otros sistemas o tareas. Si la canalización necesita determinados recursos, añada esas dependencias a la canalización con condiciones previas que se asociarán a los nodos de datos y las tareas. Esto hace que las canalizaciones sean más fáciles de depurar y más resistentes. Además, mantenga las dependencias dentro de una única canalización cuando sea posible, ya que es difícil solucionar problemas entre canalizaciones.
Expresiones anidadas
AWS Data Pipeline le permite anidar valores para crear expresiones más complejas. Por ejemplo, para realizar un cálculo de tiempo (restar 30 minutos de scheduledStartTime
) y formatear el resultado para utilizarlo en una definición de canalización, puede utilizar la siguiente expresión en una actividad:
#{format(minusMinutes(@scheduledStartTime,30),'YYYY-MM-dd hh:mm:ss')}
y utilizando el prefijo node
si la expresión forma parte de una SnsAlarm o Precondition:
#{format(minusMinutes(node.@scheduledStartTime,30),'YYYY-MM-dd hh:mm:ss')}
Lists
Las expresiones pueden evaluarse en listas y funciones en listas. Por ejemplo, supongamos que una lista se define de la siguiente forma: "myList":["one","two"]
. Si esta lista se utiliza en la expresión #{'this is ' + myList}
, se evaluará en ["this is one", "this is two"]
. Si tiene dos listas, Data Pipeline al final las nivela en su evaluación. Por ejemplo, si myList1
se define como [1,2]
y myList2
se define como [3,4]
, la expresión [#{myList1},
#{myList2}]
se evalúa en [1,2,3,4]
.
Expresión de nodo
AWS Data Pipeline utiliza la expresión #{node.*}
en SnsAlarm
o PreCondition
como referencia al objeto principal de un componente de la canalización. Dado que se hace referencia a SnsAlarm
y PreCondition
desde una actividad o recurso sin ninguna referencia de vuelta desde ellos, node
proporciona la manera de hacer referencia al remitente. Por ejemplo, la siguiente definición de canalización demuestra cómo una notificación de error puede utilizar node
para hacer referencia a su principal, en este caso ShellCommandActivity
, e incluye las horas de inicio y finalización programadas del principal en el mensaje SnsAlarm
. La referencia scheduledStartTime de ShellCommandActivity no necesita el prefijo node
porque scheduledStartTime hace referencia a sí mismo.
nota
Los campos precedidos por el signo AT (@) indican que esos campos son campos de tiempo de ejecución.
{ "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 admite referencias transitivas para los campos definidos por el usuario, pero no para los campos de tiempo de ejecución. Una referencia transitiva es una referencia entre dos componentes de la canalización que dependen de otro componente de la canalización como intermediario. El siguiente ejemplo muestra una referencia a un campo definido por el usuario transitivo y una referencia a un campo en tiempo de ejecución no transitivo, ambos válidos. Para obtener más información, consulte Campos definidos por el usuario.
{ "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" }
Evaluación de expresiones
AWS Data Pipeline proporciona un conjunto de funciones que se pueden utilizar para calcular el valor de un campo. En el siguiente ejemplo, se utiliza la función makeDate
para establecer el campo startDateTime
de un objeto Schedule
en "2011-05-24T0:00:00"
GMT/UTC.
"startDateTime" : "makeDate(2011,5,24)"