Membuat pemicu yang menjalankan alur pada jendela tumbling

BERLAKU UNTUK:Azure Data Factory Azure Synapse Analytics

Tip

Cobalah Data Factory di Microsoft Fabric, solusi analitik all-in-one untuk perusahaan. Microsoft Fabric mencakup semuanya mulai dari pergerakan data hingga ilmu data, analitik real time, kecerdasan bisnis, dan pelaporan. Pelajari cara memulai uji coba baru secara gratis!

Artikel ini menyediakan langkah-langkah untuk membuat, memulai, dan memantau pemicu jendela tumbling. Untuk informasi umum tentang pemicu dan jenis yang didukung, lihat Eksekusi dan pemicu alur.

Pemicu jendela tumbling adalah jenis pemicu yang aktif pada interval waktu berkala dari waktu mulai yang ditentukan, saat mempertahankan status. Jendela tumbling adalah serangkaian interval waktu tetap, tidak tumpang tindih, dan berdekatan. Pemicu jendela tumbling memiliki hubungan satu ke satu dengan alur dan hanya dapat mereferensikan alur tunggal. Pemicu jendela tumbling adalah alternatif yang lebih berat untuk pemicu jadwal yang menawarkan serangkaian fitur untuk skenario kompleks(dependensi pada pemicu jendela tumbling lainnya, menjalankan ulang pekerjaan yang gagal dan mengatur percobaan kembali pengguna untuk alur). Untuk lebih memahami perbedaan antara pemicu jadwal dan pemicu jendela tumbling, kunjungi di sini.

Pengalaman portal Azure Data Factory dan Synapse

  1. Untuk membuat pemicu jendela tumbling di portal Microsoft Azure, pilih tab Pemicu, lalu pilih Baru.
  2. Setelah panel konfigurasi pemicu terbuka, pilih Jendela Tumbling, lalu tentukan properti pemicu jendela tumbling Anda.
  3. Jika sudah selesai, pilih Simpan.

Properti jenis pemicu jendela tumbling

Jendela tumbling memiliki properti jenis pemicu berikut:

{
    "name": "MyTriggerName",
    "properties": {
        "type": "TumblingWindowTrigger",
        "runtimeState": "<<Started/Stopped/Disabled - readonly>>",
        "typeProperties": {
            "frequency": <<Minute/Hour>>,
            "interval": <<int>>,
            "startTime": "<<datetime>>",
            "endTime": <<datetime - optional>>,
            "delay": <<timespan - optional>>,
            "maxConcurrency": <<int>> (required, max allowed: 50),
            "retryPolicy": {
                "count": <<int - optional, default: 0>>,
                "intervalInSeconds": <<int>>,
            },
            "dependsOn": [
                {
                    "type": "TumblingWindowTriggerDependencyReference",
                    "size": <<timespan - optional>>,
                    "offset": <<timespan - optional>>,
                    "referenceTrigger": {
                        "referenceName": "MyTumblingWindowDependency1",
                        "type": "TriggerReference"
                    }
                },
                {
                    "type": "SelfDependencyTumblingWindowTriggerReference",
                    "size": <<timespan - optional>>,
                    "offset": <<timespan>>
                }
            ]
        },
        "pipeline": {
            "pipelineReference": {
                "type": "PipelineReference",
                "referenceName": "MyPipelineName"
            },
            "parameters": {
                "parameter1": {
                    "type": "Expression",
                    "value": "@{concat('output',formatDateTime(trigger().outputs.windowStartTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
                },
                "parameter2": {
                    "type": "Expression",
                    "value": "@{concat('output',formatDateTime(trigger().outputs.windowEndTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
                },
                "parameter3": "https://mydemo.azurewebsites.net/api/demoapi"
            }
        }
    }
}

Tabel berikut ini menyediakan gambaran umum tingkat tinggi tentang elemen JSON utama yang terkait dengan pengulangan dan penjadwalan pemicu jendela tumbling:

Elemen JSON Deskripsi Jenis Nilai yang diizinkan Wajib
jenis Jenis pemicu. Jenisnya adalah nilai tetap "TumblingWindowTrigger". String "TumblingWindowTrigger" Ya
runtimeState Status durasi pemicu saat ini.
Catatan: Elemen ini adalah <readOnly>.
String "Dimulai," "Dihentikan," "Dinonaktifkan" Ya
frekuensi String yang mewakili unit frekuensi (menit, jam, atau bulan) tempat pemicu berulang. Jika nilai tanggal startTime lebih terperinci daripada nilai frekuensi, tanggal startTime akan dipertimbangkan saat batas jendela dikomputasi. Misalnya, jika nilai frekuensi dihitung per jam dan nilai startTime adalah 2017-09-01T10:10:10Z, jendela pertama adalah (2017-09-01T10:10:10Z, 2017-09-01T11:10:10Z). String "Menit," "Jam", "Bulan" Ya
interval Bilangan bulat positif yang menunjukkan interval untuk nilai frekuensi, yang menentukan seberapa sering pemicu berjalan. Misalnya, jika interval adalah 3 dan frekuensi adalah "jam," pemicu akan berulang setiap 3 jam.
Catatan: Interval jendela minimum adalah 5 menit.
Bilangan bulat Bilangan bulat positif. Ya
startTime Kejadian pertama, yang bisa terjadi di masa lalu. Interval pemicu pertama adalah (startTime, startTime + interval). DateTime Nilai TanggalWaktu. Ya
endTime Kejadian terakhir, yang bisa terjadi di masa lalu. DateTime Nilai TanggalWaktu. Ya
penundaan Jumlah waktu untuk menunda dimulainya pemrosesan data untuk jendela. Eksekusi alur dimulai setelah waktu eksekusi yang diharapkan ditambah dengan jumlah penundaan. Penundaan menentukan berapa lama pemicu menunggu untuk melewati waktu jatuh tempo sebelum memicu eksekusi baru. Penundaan tidak mengubah jendela startTime. Misalnya, nilai penundaan 00:10:00 menunjukkan penundaan 10 menit. Rentang waktu
(hh:mm:ss)
Nilai rentang waktu yang defaultnya adalah 00:00:00. No
maxConcurrency Jumlah eksekusi pemicu simultan yang aktif untuk jendela yang siap. Misalnya, untuk mengisi kembali eksekusi setiap jam untuk hasil kemarin di 24 jendela. Jika maxConcurrency = 10, kejadian pemicu hanya diaktifkan untuk 10 jendela pertama (00:00-01:00 - 09:00-10:00). Setelah 10 eksekusi alur pertama yang dipicu selesai, eksekusi pemicu diaktifkan untuk 10 jendela berikutnya (10:00-11:00 - 19:00-20:00). Melanjutkan dengan contoh maxConcurrency = 10 ini, jika ada 10 jendela yang siap, ada total 10 eksekusi alur. Jika hanya ada 1 jendela yang siap, hanya ada 1 eksekusi alur. Bilangan bulat Bilangan bulat antara 1 hingga 50. Ya
retryPolicy: Count Jumlah upaya percobaan kembali sebelum eksekusi alur ditandai sebagai "Gagal." Bilangan bulat Bilangan bulat, yang defaultnya adalah 0 (tanpa percobaan kembali). No
retryPolicy: intervalInSeconds Penundaan antar upaya percobaan kembali ditentukan dalam detik. Bilangan bulat Jumlah detik, yang defaultnya adalah 30. Nilai minimumnya adalah 30. No
dependsOn: type Jenis TumblingWindowTriggerReference. Diperlukan jika dependensi diatur. String "TumblingWindowTriggerDependencyReference", "SelfDependencyTumblingWindowTriggerReference" No
dependsOn: size Ukuran jendela tumbling dependensi. Rentang waktu
(hh:mm:ss)
Nilai rentang waktu positif yang defaultnya adalah ukuran jendela pemicu anak No
dependsOn: offset Offset pemicu dependensi. Rentang waktu
(hh:mm:ss)
Nilai rentang waktu yang harus negatif dalam dependensi mandiri. Jika tidak ada nilai yang ditentukan, jendela sama dengan pemicu itu sendiri. Dependensi Mandiri: Ya
Lainnya: Tidak

Catatan

Setelah pemicu jendela tumbling diterbitkan, interval dan frekuensi tidak dapat diedit.

Variabel sistem WindowStart dan WindowEnd

Anda dapat menggunakan variabel sistem WindowStart dan WindowEnd dari pemicu jendela tumbling dalam definisi alur Anda (artinya, untuk bagian dari kueri). Teruskan variabel sistem sebagai parameter ke alur Anda dalam definisi pemicu. Contoh berikut menunjukkan cara meneruskan variabel ini sebagai parameter:

{
    "name": "MyTriggerName",
    "properties": {
        "type": "TumblingWindowTrigger",
            ...
        "pipeline": {
            "pipelineReference": {
                "type": "PipelineReference",
                "referenceName": "MyPipelineName"
            },
            "parameters": {
                "MyWindowStart": {
                    "type": "Expression",
                    "value": "@{concat('output',formatDateTime(trigger().outputs.windowStartTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
                },
                "MyWindowEnd": {
                    "type": "Expression",
                    "value": "@{concat('output',formatDateTime(trigger().outputs.windowEndTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
                }
            }
        }
    }
}

Untuk menggunakan nilai variabel sistem WindowStart dan WindowEnd dalam definisi alur, gunakan parameter "MyWindowStart" dan "MyWindowEnd" Anda secara berurutan.

Urutan eksekusi jendela dalam skenario isi ulang

Jika startTime pemicu ada di masa lalu, berdasarkan rumus ini, M=(CurrentTime- TriggerStartTime)/TumblingWindowSize, pemicu akan menghasilkan eksekusi {M} backfill(past) secara paralel, mematuhi konkurensi pemicu, sebelum menjalankan eksekusi selanjutnya. Urutan eksekusi untuk jendela adalah deterministik, dari interval terlama hingga terbaru. Saat ini, perilaku ini tidak dapat dimodifikasi.

Catatan

Ketahuilah bahwa dalam skenario ini, semua eksekusi dari startTime yang dipilih akan dijalankan sebelum menjalankan eksekusi di masa mendatang. Jika Anda perlu mengisi ulang jangka waktu yang lama, sebaiknya lakukan beban historis intial.

Elemen TriggerResource yang ada

Poin berikut berlaku untuk memperbarui elemen TriggerResource yang ada:

  • Nilai untuk elemen frekuensi (atau ukuran jendela) pemicu bersama dengan elemen interval tidak dapat diubah setelah pemicu dibuat. Nilai ini diperlukan agar eksekusi ulang triggerRun dan evaluasi dependensi berfungsi dengan baik
  • Jika nilai untuk elemen endTime pemicu berubah (ditambahkan atau diperbarui), status jendela yang sudah diproses tidak disetel ulang. Pemicunya mematuhi nilai endTime baru. Jika nilai endTime baru adalah sebelum jendela yang sudah dieksekusi, pemicu berhenti. Jika tidak, pemicu berhenti saat nilai endTime baru ditemui.

Percobaan kembali alur yang ditetapkan pengguna

Jika terjadi kegagalan alur, pemicu jendela tumbling dapat mencoba kembali eksekusi alur yang direferensikan secara otomatis, menggunakan parameter input yang sama, tanpa intervensi pengguna. Ini dapat ditentukan menggunakan properti "retryPolicy" dalam definisi pemicu.

Dependensi pemicu jendela tumbling

Jika Anda ingin memastikan bahwa pemicu jendela tumbling dijalankan hanya setelah keberhasilan eksekusi pemicu jendela tumbling lain di pabrik data, buat dependensi pemicu jendela tumbling.

Membatalkan eksekusi jendela tumbling

Anda dapat membatalkan eksekusi pemicu jendela tumbling, jika jendela tertentu berada dalam status Menunggu, Menunggu Dependensi, atau Berjalan

  • Jika jendela dalam status Berjalan, batalkan Eksekusi Alur terkait, dan eksekusi pemicu akan ditandai sebagai Dibatalkan setelahnya
  • Jika jendela dalam status Menunggu atau Menunggu Dependensi, Anda dapat membatalkan jendela dari Pemantauan:

Anda juga dapat menjalankan ulang jendela yang dibatalkan. Eksekusi ulang akan mengambil definisi terbaru yang diterbitkan dari pemicu, dan dependensi untuk jendela yang ditentukan akan dievaluasi kembali setelah eksekusi ulang

Sampel untuk Azure PowerShell dan Azure CLI

Bagian ini memperlihatkan cara menggunakan Azure PowerShell untuk membuat, memulai, dan memantau pemicu.

Catatan

Sebaiknya Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Lihat Menginstal Azure PowerShell untuk memulai. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

Prasyarat

Kode Sampel

  1. Buat file JSON bernama MyTrigger.json di folder C:\ADFv2QuickStartPSH\ dengan konten berikut:

    Penting

    Sebelum Anda menyimpan file JSON, atur nilai elemen startTime ke waktu UTC saat ini. Atur nilai elemen endTime menjadi satu jam melewati waktu UTC saat ini.

    {
      "name": "PerfTWTrigger",
      "properties": {
        "type": "TumblingWindowTrigger",
        "typeProperties": {
          "frequency": "Minute",
          "interval": "15",
          "startTime": "2017-09-08T05:30:00Z",
          "endTime" : "2017-09-08T06:30:00Z",
          "delay": "00:00:01",
          "retryPolicy": {
            "count": 2,
            "intervalInSeconds": 30
          },
          "maxConcurrency": 50
        },
        "pipeline": {
          "pipelineReference": {
            "type": "PipelineReference",
            "referenceName": "DynamicsToBlobPerfPipeline"
          },
          "parameters": {
            "windowStart": "@trigger().outputs.windowStartTime",
            "windowEnd": "@trigger().outputs.windowEndTime"
          }
        },
        "runtimeState": "Started"
      }
    }
    
  2. Buat pemicu dengan menggunakan cmdlet Set-AzDataFactoryV2Trigger:

    Set-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger" -DefinitionFile "C:\ADFv2QuickStartPSH\MyTrigger.json"
    
  3. Konfirmasikan bahwa status pemicu Dihentikan dengan menggunakan cmdlet Get-AzDataFactoryV2Trigger:

    Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  4. Mulai pemicu dengan menggunakan cmdlet Set-AzDataFactoryV2Trigger:

    Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  5. Konfirmasikan bahwa status pemicu Dimulai dengan menggunakan cmdlet Get-AzDataFactoryV2Trigger:

    Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  6. Jalankan pemicu di Azure PowerShell dengan menggunakan cmdlet Get-AzDataFactoryV2TriggerRun. Untuk mendapatkan informasi tentang eksekusi pemicu, jalankan perintah berikut secara berkala. Perbarui nilai TriggerRunStartedAfter dan TriggerRunStartedBefore agar sesuai dengan nilai dalam definisi pemicu Anda:

    Get-AzDataFactoryV2TriggerRun -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -TriggerName "MyTrigger" -TriggerRunStartedAfter "2017-12-08T00:00:00" -TriggerRunStartedBefore "2017-12-08T01:00:00"
    

Untuk memantau eksekusi pemicu dan eksekusi alur di portal Microsoft Azure, lihat Memantau eksekusi alur.