النشاط Until في مصنع بيانات Azure وتحليلات Synapse

ينطبق على: Azure Data Factory Azure Synapse Analytics

تلميح

جرب Data Factory في Microsoft Fabric، وهو حل تحليلي متكامل للمؤسسات. يغطي Microsoft Fabric كل شيء بدءا من حركة البيانات إلى علم البيانات والتحليلات في الوقت الحقيقي والمعلومات المهنية وإعداد التقارير. تعرف على كيفية بدء إصدار تجريبي جديد مجانا!

يوفر نشاط حتى نفس الوظائف التي توفرها بنية تكرار افعل-حتى في لغات البرمجة. إنه ينفذ مجموعة من الأنشطة في تكرار حلقي حتى يتم تقييم الشرط المقترن بالنشاط إلى صواب. إذا فشل نشاط داخلي، فلن يتوقف نشاط Until. يمكنك تحديد قيمة مهلة للنشاط Until.

قم بإنشاء نشاط Until باستخدام واجهة المستخدم

لاستخدام نشاط Until في البنية الأساسية لبرنامج ربط العمليات التجارية، أكمل الخطوات التالية:

  1. ابحث عن Until في جزء Pipeline Activities، واسحب نشاط Until إلى لوحة البنية الأساسية لبرنامج ربط العمليات التجارية.

  2. حدد نشاط Until على اللوحة إذا لم يكن محددا بالفعل، وعلامة التبويب Settings الخاصة به، لتحرير تفاصيله.

    إظهار علامة تبويب Settings للنشاط حتى في لوحة البنية الأساسية لبرنامج ربط العمليات التجارية.

  3. أدخل تعبيرا سيتم تقييمه بعد تنفيذ كافة الأنشطة التابعة المحددة في نشاط Until. إذا تم تقييم التعبير إلى خطأ، يقوم نشاط Until بتنفيذ جميع الأنشطة التابعة له مرة أخرى. عندما يتم تقييمه إلى true، يكتمل نشاط Until. يمكن أن يكون التعبير عبارة عن تعبير سلسلة قيمة حرفية، أو أي مجموعة من التعبيرات أو الوظائفالديناميكية أو متغيرات النظامأو مخرجات الأنشطة الأخرى. يتم فحص المثال أدناه من قيمة متغير صفيف البنية الأساسية لبرنامج ربط العمليات التجارية محدد مسبقاً يسمى TestVariable لمعرفة ما إذا كان يتم تقييمه إلى ['تم'].

    إظهار   إضافة محتوى ديناميكي&ة; جزء مع تعبير للتحقق من متغير لقيمة محددة.

  4. حدد الأنشطة التي ينفذها نشاط Until عن طريق تحديد الزر Edit Activities في النشاط Until مباشرة، أو عن طريق تحديد علامة التبويب Activities لتحديدها هناك. يتم عرض جزء محرر أنشطة جديد حيث يمكنك إضافة أي أنشطة لنشاط Until لتنفيذه. في هذا المثال، يقوم نشاط Set Variable ببساطة بتعيين قيمة المتغير المشار إليه في التعبير المذكور أعلاه إلى ['done']، لذلك سيكون تعبير نشاط Until صحيحا في المرة الأولى التي يتم تنفيذها فيها، وسيتوقف النشاط Until. في استخدامك الواقعي، يمكنك التحقق من أي شروط مطلوبة وسيستمر النشاط Until في تنفيذ الأنشطة التابعة له في كل مرة يتم فيها تقييم التعبير، حتى يتم استيفاء الشروط.

    يعرض محرر الأنشطة لنشاط Until مع تحديد نشاط

بناء الجملة

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

خصائص النوع

الخاصية ‏‏الوصف القيم المسموح بها المطلوب
الاسم اسم النشاط Until. السلسلة‬ ‏‏نعم‬
النوع يجب تعيينه إلى Until. السلسلة‬ ‏‏نعم‬
تعبير التعبير الذي يجب تقييمه إلى صواب أو خطأ تعبير. ‏‏نعم‬
المهلة مهلة الحلقة do-until بعد الوقت المحدد هنا. السلسلة. d.hh:mm:ss (أو) hh:mm:ss. القيمة الافتراضية هي سبعة أيام. القيمة القصوى هي: 90 يوما. لا
الأنشطة مجموعة الأنشطة التي تنفذ حتى يُقيّم التعبير إلى true. صفيف الأنشطة. ‏‏نعم‬

المثال 1

إشعار

يقدم هذا القسم تعريفات JSON وعينة أوامر PowerShell لتشغيل المسار. للحصول على برامج معاينة مع إرشادات تدريجية لإنشاء مسار باستخدام تعريفات Azure PowerShell وJSON، راجع البرنامج التعليمي: إنشاء مصنع بيانات باستخدام Azure PowerShell.

مسار مع النشاط Unitl

في هذا المثال، ينفذ المسار نشاطين: Until وWait. ينتظر نشاط Wait لفترة زمنية محددة قبل تشغيل نشاط Web في الحلقة. للتعرف على التعبيرات والوظائف، راجع لغة التعبير ووظائفه.

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

المثال 2

ينسخ المسار في هذا المثال البيانات من مجلد المدخلات إلى مجلد المخرجات في الحلقة. تنتهي الحلقة عندما تُعيّن قيمة المعلمة المكررة إلى "خطأ" أو "مهلة" بعد دقيقة واحدة.

مسار مع نشاط 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"
            }                        
        }        
    }
}

خدمة تخزين Azure المرتبطة (AzureStorageLinkedService.json)

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

مجموعة بيانات Azure Blob ذات معلمات (BlobDataset.json)

يُعين المسارfolderPath إلى قيمة outputPath1 أو outputPath2 معلمة المسار.

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

معلمة المسار JSON (PipelineParameters.json)

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

أوامر PowerShell

إشعار

نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

تفترض هذه الأوامر أنك قد حفظت ملفات JSON في المجلد: 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
}

راجع أنشطة تدفق التحكم الأخرى المدعومة: