Bagikan melalui


Aktivitas until di Azure Data Factory dan Synapse Analytics

BERLAKU UNTUK: Azure Data Factory Azure Synapse Analytics

Tip

Cobalah Data Factory di Microsoft Fabric, sebuah solusi analitik terpadu untuk perusahaan. Microsoft Fabric mencakup segala hal mulai dari pergerakan data hingga ilmu data, analitik real-time, intelijen bisnis, dan pelaporan. Pelajari cara memulai uji coba baru secara gratis!

Aktivitas Until menyediakan fungsionalitas yang sama dengan yang disediakan struktur perulangan do-until dalam bahasa pemrograman. Ini menjalankan kumpulan aktivitas dalam perulangan hingga kondisi yang terkait dengan aktivitas tersebut bernilai benar. Jika aktivitas dalam gagal, aktivitas Until tidak berhenti. Anda dapat menentukan nilai batas waktu untuk aktivitas 'until'.

Membuat aktivitas Until dengan UI

Untuk menggunakan aktivitas Until dalam alur, selesaikan langkah-langkah berikut:

  1. Cari Until di panel Aktivitas pipeline, dan seret aktivitas Until ke kanvas pipeline.

  2. Pilih aktivitas Hingga di kanvas jika belum dipilih, dan tab Pengaturannya , untuk mengedit detailnya.

    Menampilkan tab Pengaturan dari aktivitas Until di kanvas alur.

  3. Masukkan ekspresi yang akan dievaluasi setelah semua aktivitas anak yang ditentukan dalam aktivitas Until dijalankan. Jika ekspresi dievaluasi sebagai false, aktivitas Until akan mengeksekusi semua aktivitas turunannya lagi. Ketika nilainya adalah true, aktivitas Until selesai. Ekspresi dapat berupa ekspresi string harfiah, atau kombinasi ekspresi dinamis, fungsi,variabel sistem, atau output dari aktivitas lain. Contoh di bawah ini memeriksa nilai variabel array pipeline yang telah ditentukan sebelumnya bernama TestVariable untuk melihat apakah ini bernilai ['done'].

    Menampilkan panel   Tambahkan konten dinamis   dengan ekspresi untuk memeriksa variabel apakah memiliki nilai yang sudah ditentukan.

  4. Tentukan aktivitas yang dijalankan aktivitas Until dengan memilih tombol Edit Aktivitas pada aktivitas Until secara langsung, atau dengan memilih tab Aktivitas untuk memilihnya di sana. Panel editor aktivitas baru ditampilkan di mana Anda dapat menambahkan aktivitas apa pun untuk dijalankan oleh aktivitas 'Until'. Dalam contoh ini, aktivitas Atur Variabel menetapkan nilai variabel yang dirujuk ke 'selesai'. Jadi ekspresi aktivitas Until akan benar saat pertama kali dijalankan, lalu aktivitas Until akan berhenti. Anda dapat menggunakan variabel serupa untuk memeriksa kondisi apa pun. Aktivitas Until mengeksekusi aktivitas anaknya setiap kali ekspresi dievaluasi, sampai kondisi terpenuhi. Jika Anda melakukan iterasi atas beberapa aktivitas, ada potensi keterlambatan dalam mengakhiri perulangan karena pekerjaan penggabungan dan pembersihan yang dilakukan oleh pipeline.

    Menampilkan editor aktivitas untuk aktivitas Until dengan aktivitas Tetapkan Variabel yang ditentukan.

Syntax

{
    "type": "Until",
    "typeProperties": {
        "expression":  {
            "value":  "<expression that evaluates to true or false>", 
            "type": "Expression"
        },
        "timeout": "<time out for the loop. for example: 00:10:00 (10 minute)>",
        "activities": [
            {
                "<Activity 1 definition>"
            },
            {
                "<Activity 2 definition>"
            },
            {
                "<Activity N definition>"
            }
        ]
    },
    "name": "MyUntilActivity"
}

Properti jenis

Property Description Nilai yang diizinkan Required
name Until Nama aktivitas. String Yes
jenis Harus disetel ke Until. String Yes
ekspresi Ekspresi yang harus bernilai benar atau salah Expression. Yes
timeout Waktu perulangan do-until habis setelah waktu yang ditentukan di sini. String. d.hh:mm:ss (atau) hh:mm:ss. Nilai defaultnya adalah tujuh hari. Nilai maksimum adalah: 90 hari. No
Activities Kumpulan aktivitas yang dijalankan sampai ekspresi mengevaluasi ke true. Susunan kegiatan. Yes

Contoh 1

Note

Bagian ini menyediakan definisi JSON dan contoh perintah PowerShell untuk menjalankan alur. Untuk panduan dengan instruksi langkah demi langkah untuk membuat alur dengan menggunakan definisi Azure PowerShell dan JSON, lihat tutorial: membuat pabrik data dengan menggunakan Azure PowerShell.

Alur dengan aktivitas Until

Dalam contoh ini, alur memiliki dua aktivitas: Until dan Wait. Aktivitas Tunggu menunggu periode waktu yang ditentukan sebelum menjalankan aktivitas Web dalam perulangan. Untuk mempelajari tentang ekspresi dan fungsi, lihat Bahasa dan fungsi ekspresi.

{
    "name": "DoUntilPipeline",
    "properties": {
        "activities": [
            {
                "type": "Until",
                "typeProperties": {
                    "expression": {
                        "value": "@equals('Failed', coalesce(body('MyUnauthenticatedActivity')?.status, actions('MyUnauthenticatedActivity')?.status, 'null'))",
                        "type": "Expression"
                    },
                    "timeout": "00:10:00",
                    "activities": [
                        {
                            "name": "MyUnauthenticatedActivity",
                            "type": "WebActivity",
                            "typeProperties": {
                                "method": "get",
                                "url": "https://www.fake.com/",
                                "headers": {
                                    "Content-Type": "application/json"
                                }
                            },
                            "dependsOn": [
                                {
                                    "activity": "MyWaitActivity",
                                    "dependencyConditions": [ "Succeeded" ]
                                }
                            ]
                        },
                        {
                            "type": "Wait",
                            "typeProperties": {
                                "waitTimeInSeconds": 1
                            },
                            "name": "MyWaitActivity"
                        }
                    ]
                },
                "name": "MyUntilActivity"
            }
        ]
    }
}

Contoh 2

Pipeline dalam contoh ini menyalin data dari folder input ke folder output secara berulang. Perulangan berakhir ketika nilai untuk parameter pengulangan diatur ke false atau waktu habis setelah satu menit.

Pipeline dengan aktivitas Until (Adfv2QuickStartPipeline.json)

{
    "name": "Adfv2QuickStartPipeline",
    "properties": {
        "activities": [
            {
                "type": "Until",
                "typeProperties": {
                    "expression":  {
                        "value":  "@equals('false', pipeline().parameters.repeat)", 
                        "type": "Expression"
                    },
                    "timeout": "00:10:00",
                    "activities": [
                        {
                            "name": "CopyFromBlobToBlob",
                            "type": "Copy",
                            "inputs": [
                                {
                                    "referenceName": "BlobDataset",
                                    "parameters": {
                                        "path": "@pipeline().parameters.inputPath"
                                    },
                                    "type": "DatasetReference"
                                }
                            ],
                            "outputs": [
                                {
                                    "referenceName": "BlobDataset",
                                    "parameters": {
                                        "path": "@pipeline().parameters.outputPath"
                                    },
                                    "type": "DatasetReference"
                                }
                            ],
                            "typeProperties": {
                                "source": {
                                    "type": "BlobSource"
                                },
                                "sink": {
                                    "type": "BlobSink"
                                }
                            },
                            "policy": {
                                "retry": 1,
                                "timeout": "00:10:00",
                                "retryIntervalInSeconds": 60
                            }
                        }
                    ]
                },
                "name": "MyUntilActivity"
            }
        ],
        "parameters": {
            "inputPath": {
                "type": "String"
            },
            "outputPath": {
                "type": "String"
            },
            "repeat": {
                "type": "String"
            }                        
        }        
    }
}

Layanan Azure Storage yang Ditautkan (AzureStorageLinkedService.json)

{
    "name": "AzureStorageLinkedService",
    "properties": {
        "type": "AzureStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<Azure Storage account name>;AccountKey=<Azure Storage account key>"
        }
    }
}

Himpunan data Azure Blob berparameter (BlobDataset.json)

Alur mengatur folderPath ke nilai parameter outputPath1 atau outputPath2 dari alur.

{
    "name": "BlobDataset",
    "properties": {
        "type": "AzureBlob",
        "typeProperties": {
            "folderPath": {
                "value": "@{dataset().path}",
                "type": "Expression"
            }
        },
        "linkedServiceName": {
            "referenceName": "AzureStorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "parameters": {
            "path": {
                "type": "String"
            }
        }
    }
}

Parameter pipa JSON (PipelineParameters.json)

{
    "inputPath": "adftutorial/input",
    "outputPath": "adftutorial/outputUntil",
    "repeat": "true"
}

Perintah PowerShell

Note

Kami merekomendasikan agar Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Untuk memulai, lihat Install Azure PowerShell. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

Perintah ini mengasumsikan bahwa Anda menyimpan file JSON ke dalam folder: C:\ADF.

Connect-AzAccount
Select-AzSubscription "<Your subscription name>"

$resourceGroupName = "<Resource Group Name>"
$dataFactoryName = "<Data Factory Name. Must be globally unique>";
Remove-AzDataFactoryV2 $dataFactoryName -ResourceGroupName $resourceGroupName -force


Set-AzDataFactoryV2 -ResourceGroupName $resourceGroupName -Location "East US" -Name $dataFactoryName
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureStorageLinkedService" -DefinitionFile "C:\ADF\AzureStorageLinkedService.json"
Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "BlobDataset" -DefinitionFile "C:\ADF\BlobDataset.json"
Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "Adfv2QuickStartPipeline" -DefinitionFile "C:\ADF\Adfv2QuickStartPipeline.json"
$runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName "Adfv2QuickStartPipeline" -ParameterFile C:\ADF\PipelineParameters.json

while ($True) {
    $run = Get-AzDataFactoryV2PipelineRun -ResourceGroupName $resourceGroupName -DataFactoryName $DataFactoryName -PipelineRunId $runId

    if ($run) {
        if ($run.Status -ne 'InProgress') {
            Write-Host "Pipeline run finished. The status is: " $run.Status -foregroundcolor "Yellow"
            $run
            break
        }
        Write-Host  "Pipeline is running...status: InProgress" -foregroundcolor "Yellow"
        Write-Host "Activity run details:" -foregroundcolor "Yellow"
        $result = Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId $runId -RunStartedAfter (Get-Date).AddMinutes(-30) -RunStartedBefore (Get-Date).AddMinutes(30)
        $result

        Write-Host "Activity 'Output' section:" -foregroundcolor "Yellow"
        $result.Output -join "`r`n"
    }

    Start-Sleep -Seconds 15
}

Lihat aktivitas alur kontrol lain yang didukung: