Expressões - AWS Data Pipeline

AWS Data Pipeline não está mais disponível para novos clientes. Os clientes existentes do AWS Data Pipeline podem 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 AWS Data Pipeline web em tempo de execução, garantindo que todas as expressões 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 AWS Data Pipeline funções. 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 runtime @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

AWS Data Pipeline permite aninhar valores 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 usando o node prefixo se a expressão fizer parte de uma pré-condição SnsAlarm ou:

#{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ó

AWS Data Pipeline usa a #{node.*} expressão em uma SnsAlarm ou PreCondition para uma referência anterior ao objeto pai de um componente de 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 scheduledStartTime referência em não ShellCommandActivity requer o node prefixo porque scheduledStartTime se refere a si mesma.

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

AWS Data Pipeline suporta referências transitivas para campos definidos pelo usuário, mas não 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

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