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