Ekspresi - AWS Data Pipeline

AWS Data Pipeline tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada dari AWS Data Pipeline dapat terus menggunakan layanan seperti biasa. Pelajari selengkapnya

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Ekspresi

Ekspresi memungkinkan Anda untuk berbagi nilai di seluruh objek terkait. Ekspresi diproses oleh layanan web AWS Data Pipeline saat runtime, memastikan bahwa semua ekspresi diganti dengan nilai ekspresi.

Ekspresi dibatasi oleh: "#{" dan "}". Anda dapat menggunakan ekspresi di objek definisi alur apa pun di mana string itu legal. Jika slot adalah referensi atau salah satu dari jenis ID, NAME, TYPE, SPHERE, nilainya tidak dievaluasi dan digunakan kata demi kata.

Ekspresi berikut memanggil salah satu fungsi AWS Data Pipeline. Untuk informasi selengkapnya, lihat Evaluasi Ekspresi.

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

Mereferensikan Bidang dan Objek

Ekspresi bisa menggunakan bidang objek saat ini di mana ekspresi ada, atau bidang objek lain yang ditautkan oleh referensi.

Format slot terdiri dari waktu pembuatan diikuti oleh waktu pembuatan objek, seperti @S3BackupLocation_2018-01-31T11:05:33.

Anda juga dapat mereferensikan ID slot persis yang ditentukan dalam definisi alur, seperti ID slot lokasi backup Amazon S3. Untuk mereferensikan ID slot, gunakan #{parent.@id}.

Dalam contoh berikut, bidang filePath mereferensikan bidang id di objek yang sama untuk membentuk nama file. Nilai filePath dievaluasi menjadi "s3://mybucket/ExampleDataNode.csv".

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

Untuk menggunakan bidang yang ada pada objek lain yang ditautkan oleh referensi, gunakan kata kunci node. Kata kunci ini hanya tersedia dengan objek alarm dan prasyarat.

Melanjutkan contoh sebelumnya, ekspresi dalam SnsAlarm dapat mereferensi ke rentang tanggal dan waktu dalam Schedule, karena S3DataNode mereferensikan keduanya.

Secara khusus, bidang FailureNotify message dapat menggunakan bidang waktu aktif @scheduledStartTime dan @scheduledEndTime dari ExampleSchedule, karena referensi bidang ExampleDataNode onFail FailureNotify dan bidang referensi schedule 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" },
catatan

Anda dapat membuat alur yang memiliki dependensi, seperti tugas dalam alur Anda yang bergantung pada pekerjaan sistem atau tugas lain. Jika alur Anda memerlukan sumber daya tertentu, tambahkan dependensi tersebut ke alur menggunakan prasyarat yang Anda kaitkan dengan simpul data dan tugas. Ini membuat alur Anda lebih mudah untuk di-debug dan lebih tangguh. Selain itu, pertahankan dependensi Anda dalam satu alur jika memungkinkan, karena pemecahan masalah lintas alur sulit dilakukan.

Ekspresi Terinduk

AWS Data Pipeline memungkinkan Anda untuk menyarangkan nilai untuk membuat ekspresi yang lebih kompleks. Misalnya, untuk melakukan penghitungan waktu (kurangi 30 menit dari scheduledStartTime) dan memformat hasilnya untuk digunakan dalam definisi alur, Anda bisa menggunakan ekspresi berikut dalam aktivitas:

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

dan menggunakan prefiks node jika ekspresi merupakan bagian dari SnsAlarm atau Prakondisi:

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

Daftar

Ekspresi dapat dievaluasi pada daftar dan fungsi pada daftar. Misalnya, asumsikan bahwa daftar didefinisikan seperti berikut: "myList":["one","two"]. Jika daftar ini digunakan dalam ekspresi#{'this is ' + myList}, itu akan mengevaluasi["this is one", "this is two"]. Jika Anda memiliki dua daftar, Data Pipeline pada akhirnya akan meratakannya dalam evaluasi mereka. Misalnya, jika myList1 didefinisikan sebagai [1,2] dan myList2 didefinisikan sebagai [3,4] maka ekspresi [#{myList1}, #{myList2}] akan dievaluasi menjadi [1,2,3,4].

Ekspresi simpul

AWS Data Pipeline menggunakan ekspresi #{node.*} baik dalam SnsAlarm atau PreCondition untuk referensi balik ke objek induk komponen alur. Karena SnsAlarm dan PreCondition direferensikan dari aktivitas atau sumber daya tanpa referensi balik dari mereka, node menyediakan cara untuk mereferensi ke pereferensi. Misalnya, definisi alur berikut menunjukkan bagaimana notifikasi kegagalan dapat menggunakan node untuk membuat referensi ke induknya, dalam hal ini ShellCommandActivity, dan menyertakan waktu mulai dan berakhir terjadwal induk dalam pesan SnsAlarm. Referensi ScheduleStartTime pada ShellCommandActivity tidak memerlukan prefiks node karena ScheduleStartTime mereferensi pada dirinya sendiri.

catatan

Kolom yang diawali dengan tanda AT (@) menunjukkan bahwa kolom tersebut adalah kolom waktu aktif.

{ "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 mendukung referensi transitif untuk bidang yang ditentukan pengguna, tetapi tidak untuk bidang waktu aktif. Referensi transitif adalah referensi antara dua komponen alur yang bergantung pada komponen alur lain sebagai perantara. Contoh berikut menunjukkan referensi ke bidang yang ditentukan pengguna transitif dan referensi ke bidang waktu proses non-transitif, keduanya valid. Untuk informasi selengkapnya, lihat Bidang yang ditentukan pengguna.

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

Evaluasi Ekspresi

AWS Data Pipeline menyediakan serangkaian fungsi yang dapat Anda gunakan untuk menghitung nilai bidang. Contoh berikut menggunakan fungsi makeDate untuk mengatur bidang startDateTime dari objek Schedule ke "2011-05-24T0:00:00" GMT/UTC.

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