Aktivitas hingga (until) di Azure Data Factory dan Azure Synapse Analytics

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!

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

Membuat aktivitas Until dengan antarmuka pengguna

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

  1. Cari Hingga di panel Aktivitas alur, dan seret aktivitas Hingga ke kanvas alur.

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

    Shows the Settings tab of the Until activity in the pipeline canvas.

  3. Masukkan ekspresi yang akan dievaluasi setelah semua aktivitas anak yang ditentukan dalam aktivitas Until dijalankan. Jika ekspresi mengevaluasi ke false, aktivitas Until menjalankan semua aktivitas turunannya lagi. Ketika dievaluasi ke true, aktivitas Until selesai. Ekspresi dapat berupa ekspresi karakter harfiah, atau kombinasi apa pun dari ekspresi, fungsi dinamis, variabel sistem, atau output dari aktivitas lain. Contoh di bawah ini memeriksa nilai variabel array alur yang ditentukan sebelumnya yang disebut TestVariable untuk melihat apakah nilainya dievaluasi ke ['selesai'].

    Shows the  Add dynamic content  pane with an expression to check a variable for a defined value.

  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 agar aktivitas Hingga dijalankan. Dalam contoh ini, aktivitas Tetapkan Variabel hanya mengatur nilai variabel yang direferensikan dalam ekspresi yang disebutkan di atas ke ['done'], sehingga ekspresi Aktivitas until akan benar saat pertama kali dijalankan, dan aktivitas Until akan berhenti. Dalam penggunaan di dunia nyata, Anda dapat memeriksa kondisi apa pun yang diperlukan dan aktivitas Until akan terus menjalankan aktivitas turunannya setiap kali ekspresi dievaluasi, hingga kondisi terpenuhi.

    Shows the activities editor for an Until activity with a Set Variable activity defined.

Sintaks

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

Properti Deskripsi Nilai yang diizinkan Wajib
nama Nama Untilaktivitas. String Ya
jenis Harus diatur ke Until. String Ya
expression Ekspresi yang harus mengevaluasi ke true atau false Ekspresi. Ya
waktu habis Waktu loop do-until keluar 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
Aktivitas Set aktivitas yang dijalankan saat ekspresi mengevaluasi ke true. Array Aktivitas. Ya

Contoh 1

Catatan

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

Alur dengan aktivitas Until

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

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

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

Alur dengan aktivitas Switch (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 tertaut Azure Storage (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 alur outputPath1 atau outputPath2.

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

Parameter alur JSON (PipelineParameters.json)

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

Perintah PowerShell

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.

Perintah ini mengasumsikan bahwa Anda telah 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 yang didukung lainnya: