AWS Data Pipeline não está mais disponível para novos clientes. Clientes existentes da AWS Data Pipeline pode continuar usando o serviço normalmente. Saiba mais
As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Expressões
Com as expressões, é possível compartilhar um valor nos objetos relacionados. As expressões são processadas pelo serviço web do AWS Data Pipeline no tempo de execução, o que garante que todas elas sejam substituídas pelo valor da expressão.
As expressões são delimitadas por "#{" e "}". Você pode usar uma expressão em qualquer objeto de definição de pipeline em que uma string é válida. Se um slot for uma referência ou destes tipos: ID, NAME, TYPE ou SPHERE, o valor dele não será avaliado nem usado textualmente.
A expressão a seguir chama uma das funções do AWS Data Pipeline. Para obter mais informações, consulte Avaliação de expressões.
#{format(myDateTime,'YYYY-MM-dd hh:mm:ss')}
Referenciar campos e objetos
As expressões podem usar campos do objeto atual em que a expressão existe ou campos de outro objeto vinculado por uma referência.
Um slot consiste em uma data de criação seguida pelo horário de criação do objeto, como @S3BackupLocation_2018-01-31T11:05:33
.
Você também pode fazer referência ao ID do slot exato especificado na definição do pipeline, como o ID do slot do local de backup do Amazon S3. Para fazer referência ao ID do slot, use #{parent.@id}
.
No exemplo a seguir, o campo filePath
faz referência ao campo id
no mesmo objeto para formar um nome de arquivo. O valor de filePath
é avaliado para "s3://mybucket/ExampleDataNode.csv
".
{ "id" : "ExampleDataNode", "type" : "S3DataNode", "schedule" : {"ref" : "ExampleSchedule"}, "filePath" : "s3://mybucket/#{parent.@id}.csv", "precondition" : {"ref" : "ExampleCondition"}, "onFail" : {"ref" : "FailureNotify"} }
Para usar um campo que existe em outro objeto vinculado por uma referência, use a palavra-chave node
. Essa palavra-chave só está disponível com objetos de alarme e precondição.
Continuando com o exemplo anterior, uma expressão em SnsAlarm
pode fazer referência ao intervalo de data e de hora em Schedule
, pois S3DataNode
faz referência a ambas.
Especificamente, o campo message
de FailureNotify
pode usar os campos de tempo de execução @scheduledStartTime
e @scheduledEndTime
de ExampleSchedule
, pois o campo onFail
do ExampleDataNode
faz referência a FailureNotify
e seu respectivo campo schedule
faz referência 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
Você pode criar pipelines com dependências, por exemplo, tarefas no seu pipeline que dependem do trabalho de outros sistemas ou de outras tarefas. Se o pipeline exigir determinados recursos, adicione essas dependências a ele usando precondições associadas a nós de dados e a tarefas. Isso faz com que os pipelines sejam depurados com mais facilidade e sejam mais resilientes. Além disso, mantenha suas dependências em um único pipeline sempre que possível, pois é difícil solucionar problemas em entre vários pipelines.
Expressões aninhadas
O AWS Data Pipeline permite o uso de valores aninhados para criar expressões mais complexas. Por exemplo, para executar um cálculo de tempo (subtrair 30 minutos de scheduledStartTime
) e formatar o resultado para usar em uma definição de pipeline, você pode usar a seguinte expressão em uma atividade:
#{format(minusMinutes(@scheduledStartTime,30),'YYYY-MM-dd hh:mm:ss')}
e usar o prefixo node
se a expressão for parte de um SnsAlarm ou de uma precondição:
#{format(minusMinutes(node.@scheduledStartTime,30),'YYYY-MM-dd hh:mm:ss')}
Listas
As expressões podem ser avaliadas em listas e em funções nas listas. Por exemplo, suponha que uma lista seja definida da seguinte maneira: "myList":["one","two"]
. Se essa lista for usada na expressão #{'this is ' + myList}
, ela será avaliada como ["this is one", "this is two"]
. Se você tiver duas listas, o Data Pipeline as nivelará na avaliação. Por exemplo, se myList1
for definida como [1,2]
e myList2
como [3,4]
, a expressão [#{myList1},
#{myList2}]
será avaliada como [1,2,3,4]
.
Expressão de nó
O AWS Data Pipeline usa a expressão #{node.*}
em SnsAlarm
ou PreCondition
para referência inversa ao objeto principal de um componente do pipeline. Como SnsAlarm
e PreCondition
são referenciados a partir de uma atividade ou um recurso sem referência inversa, node
fornece uma forma consultar o indicador. Por exemplo, a definição do pipeline a seguir demonstra como uma notificação de falha pode usar o node
para fazer referência ao nó principal, neste caso ShellCommandActivity
, e incluir as horas de início e término programadas desse nó principal na mensagem do SnsAlarm
. A referência scheduledStartTime em ShellCommandActivity não requer o prefixo node
, pois scheduledStartTime faz referência própria.
nota
O sinal @ (arroba) que precede os campos indica que eles são campos de tempo de execução.
{ "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" },
O AWS Data Pipeline oferece suporte a referências transitivas para campos definidos pelo usuário, mas não para campos de tempo de execução. Uma referência transitiva é uma referência entre dois componentes de pipeline que dependem de outro componente de pipeline como intermediário. O exemplo a seguir mostra uma referência a um campo transitivo definido por usuário e uma referência a um campo não transitivo de tempo de execução, ambos válidos. Para obter mais informações, consulte Campos definidos pelo usuário.
{ "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" }
Avaliação de expressões
O AWS Data Pipeline fornece um conjunto de funções que você pode usar para calcular o valor de um campo. O exemplo a seguir usa a função makeDate
para definir o campo startDateTime
de um objeto Schedule
como "2011-05-24T0:00:00"
GMT/UTC.
"startDateTime" : "makeDate(2011,5,24)"