Delete Activity in Azure Data Factory and Azure Synapse Analytics

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

تلميح

Data Factory في Microsoft Fabric هو الجيل القادم من Azure Data Factory، مع بنية أبسط، وذكاء اصطناعي مدمج، وميزات جديدة. إذا كنت جديدا في تكامل البيانات، ابدأ مع Fabric Data Factory. يمكن لأعباء عمل ADF الحالية الترقية إلى Fabric للوصول إلى قدرات جديدة في علوم البيانات، والتحليلات اللحظية، والتقارير.

يمكنك استخدام Delete Activity في Azure Data Factory لحذف الملفات أو المجلدات من مخازن التخزين المحلية أو السحابية. استخدم هذا النشاط لتنظيف الملفات أو أرشفتها عندما لا تكون هناك حاجة إليها.

تحذير

لا يمكن استعادة الملفات أو المجلدات المحذوفة (إلا إذا كان التخزين مجهزاً بالحذف البرمجي). كن حذراً عند استخدام نشاط حذف لحذف الملفات أو المجلدات.

أفضل الممارسات

فيما يلي بعض التوصيات لاستخدام نشاط الحذف:

  • قم بالنسخ الاحتياطي للملفات قبل حذفها باستخدام نشاط الحذف في حالة الحاجة إلى استعادتها في المستقبل.

  • تأكد من أن الخدمة لديها أذونات كتابة لحذف المجلدات أو الملفات من مخزن التخزين.

  • تأكد من عدم حذف الملفات التي تتم كتابتها في الوقت نفسه.

  • إذا كنت تريد حذف ملفات أو مجلد من نظام محلي، فتأكد من استخدام وقت تشغيل تكامل مستضاف ذاتيا مع إصدار أكبر من 3.14.

مخازن البيانات المدعومة

إنشاء نشاط حذف باستخدام واجهة المُستخدم

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

  1. ابحث عن حذف في جزء أنشطة مسار المعالجة، واسحب نشاط «حذف» إلى لوحة مسار المعالجة.

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

    يظهر واجهة المستخدم لنشاط الحذف.

  3. حدد مجموعة بيانات موجودة أو أنشئ مجموعة بيانات جديدة تُحدد الملفات المراد حذفها. إذا تم تحديد ملفات متعددة، فمكن الحذف المتكرر اختياريًا، والذي يحذف البيانات في أي مجلدات تابعة أيضًا. يمكنك أيضًا تحديد الحد الأقصى لعدد الاتصالات المتزامنة للعملية.

  4. قم بتكوين التسجيل اختياريًا عن طريق تحديد علامة التبويب إعدادات التسجيل وتحديد موقع خدمة مرتبط بحساب تسجيل جديد أو إنشاء حساب تسجيل جديد لتسجيل نتائج عمليات الحذف التي تم تنفيذها.

    إظهار   إعدادات التسجيل&ة; لحذف النشاط.

بناء الجملة

{
    "name": "DeleteActivity",
    "type": "Delete",
    "typeProperties": {
        "dataset": {
            "referenceName": "<dataset name>",
            "type": "DatasetReference"
        },
        "storeSettings": {
            "type": "<source type>",
            "recursive": true/false,
            "maxConcurrentConnections": <number>
        },
        "enableLogging": true/false,
        "logStorageSettings": {
            "linkedServiceName": {
                "referenceName": "<name of linked service>",
                "type": "LinkedServiceReference"
            },
            "path": "<path to save log file>"
        }
    }
}

خصائص النوع

الخاصية الوصف مطلوب
مجموعة البيانات توفر مرجع مجموعة البيانات لتحديد الملفات أو المجلدات التي سيتم حذفها ‏‏نعم‬
التكرار يشير إلى ما إذا كان يتم حذف الملفات بشكل متكرر من المجلدات الفرعية أو من المجلد المحدد فقط. ‏‏لا. الافتراضي هو false.
maxConcurrentConnections عدد الاتصالات للاتصال بمخزن التخزين بشكل متزامن لحذف المجلد أو الملفات. ‏‏لا. الافتراضي هو 1.
تمكين التسجيل يشير إلى ما إذا كنت بحاجة إلى تسجيل أسماء الملفات أو المجلد المحذوف. إذا كان ذلك صحيحاً، تحتاج إلى توفير حساب تخزين لحفظ ملف السجل، بحيث يمكنك تعقب سلوكيات نشاط الحذف عن طريق قراءة ملف السجل. لا
logStorageSettings ينطبق فقط عندما يكون enablelogging = true.

مجموعة من خصائص التخزين التي يمكن تحديدها حيث تريد حفظ ملف السجل الذي يحتوي على أسماء المجلدات أو الملفات المحذوفة بواسطة نشاط الحذف.
لا
linkedServiceName ينطبق فقط عندما يكون enablelogging = true.

الخدمة المرتبطة Azure Storage، Azure Data Lake Storage Gen1، أو Azure Data Lake Storage Gen2 لتخزين ملف السجل الذي يحتوي على أسماء المجلدات أو الملفات التي تم حذفها بواسطة نشاط الحذف. كن على علم أنه يجب أن يكون مكونا بنفس نوع Integration Runtime الذي تستخدمه عملية الحذف لحذف الملفات.
لا
path ينطبق فقط عندما يكون enablelogging = true.

مسار حفظ ملف السجل في حساب التخزين الخاص بك. إذا لم توفر مسارا، تنشئ الخدمة حاوية لك.
لا

مراقبة‬

هناك مكانان يمكنك من خلالهما مشاهدة نتائج نشاط الحذف ورصدها:

  • من إخراج نشاط الحذف.
  • من ملف السجل.

إخراج نموذج نشاط الحذف

{ 
  "datasetName": "AmazonS3",
  "type": "AmazonS3Object",
  "prefix": "test",
  "bucketName": "adf",
  "recursive": true,
  "isWildcardUsed": false,
  "maxConcurrentConnections": 2,  
  "filesDeleted": 4,
  "logPath": "https://sample.blob.core.windows.net/mycontainer/5c698705-a6e2-40bf-911e-e0a927de3f07",
  "effectiveIntegrationRuntime": "MyAzureIR (West Central US)",
  "executionDuration": 650
}

نموذج ملف سجل نشاط الحذف

الاسم الفئة ‏الحالة خطأ
test1/yyy.json الملف تم الحذف
test2/hello789.txt الملف تم الحذف
test2/test3/hello000.txt الملف تم الحذف
test2/test3/zzz.json الملف تم الحذف

أمثلة على استخدام نشاط الحذف

حذف مجلدات أو ملفات معينة

يحتوي المخزن على بنية المجلد التالية:

Root/
    Folder_A_1/
        1.txt
        2.txt
        3.csv
    Folder_A_2/
        4.txt
        5.csv
        Folder_B_1/
            6.txt
            7.csv
        Folder_B_2/
            8.txt

الآن تستخدم نشاط الحذف لحذف المجلد أو الملفات من خلال الجمع بين قيمة خاصية مختلفة من مجموعة البيانات ونشاط الحذف:

folderPath fileName التكرار المخرجات
الجذر/ Folder_A_2 قيمة فارغة خطأ Root/
    Folder_A_1/
        1.txt
        2.txt
        3.csv
    Folder_A_2/
         4.txt
         5.csv
        Folder_B_1/
            6.txt
            7.csv
        Folder_B_2/
            8.txt
الجذر/ Folder_A_2 قيمة فارغة صواب Root/
    Folder_A_1/
        1.txt
        2.txt
        3.csv
     Folder_A_2/
         4.txt
         5.csv
         Folder_B_1/
             6.txt
             7.csv
         Folder_B_2/
             8.txt
الجذر/ Folder_A_2 *.txt خطأ Root/
    Folder_A_1/
        1.txt
        2.txt
        3.csv
    Folder_A_2/
         4.txt
        5.csv
        Folder_B_1/
            6.txt
            7.csv
        Folder_B_2/
            8.txt
الجذر/ Folder_A_2 *.txt صواب Root/
    Folder_A_1/
        1.txt
        2.txt
        3.csv
    Folder_A_2/
         4.txt
        5.csv
        Folder_B_1/
             6.txt
            7.csv
        Folder_B_2/
             8.txt

تنظيف المجلد أو الملفات المقسمة زمنياً بشكل دوري

يمكنك إنشاء بنية أساسية لبرنامج ربط العمليات التجارية لتنظيف المجلد أو الملفات المقسمة زمنياً بشكل دوري. على سبيل المثال، بنية المجلد مشابهة كما يلي: /mycontainer/2018/12/14/*.csv. يمكنك استخدام متغير نظام الخدمة من مشغل الجدولة لتحديد المجلد أو الملفات التي يجب حذفها في كل تشغيل للبنية الأساسية لبرنامج ربط العمليات التجارية.

نموذج للبنية الأساسية لبرنامج ربط العمليات التجارية

{
    "name":"cleanup_time_partitioned_folder",
    "properties":{
        "activities":[
            {
                "name":"DeleteOneFolder",
                "type":"Delete",
                "dependsOn":[

                ],
                "policy":{
                    "timeout":"7.00:00:00",
                    "retry":0,
                    "retryIntervalInSeconds":30,
                    "secureOutput":false,
                    "secureInput":false
                },
                "userProperties":[

                ],
                "typeProperties":{
                    "dataset":{
                        "referenceName":"PartitionedFolder",
                        "type":"DatasetReference",
                        "parameters":{
                            "TriggerTime":{
                                "value":"@formatDateTime(pipeline().parameters.TriggerTime, 'yyyy/MM/dd')",
                                "type":"Expression"
                            }
                        }
                    },
                    "logStorageSettings":{
                        "linkedServiceName":{
                            "referenceName":"BloblinkedService",
                            "type":"LinkedServiceReference"
                        },
                        "path":"mycontainer/log"
                    },
                    "enableLogging":true,
                    "storeSettings":{
                        "type":"AzureBlobStorageReadSettings",
                        "recursive":true
                    }
                }
            }
        ],
        "parameters":{
            "TriggerTime":{
                "type":"string"
            }
        },
        "annotations":[

        ]
    }
}

نموذج مجموعة بيانات

{
    "name":"PartitionedFolder",
    "properties":{
        "linkedServiceName":{
            "referenceName":"BloblinkedService",
            "type":"LinkedServiceReference"
        },
        "parameters":{
            "TriggerTime":{
                "type":"string"
            }
        },
        "annotations":[

        ],
        "type":"Binary",
        "typeProperties":{
            "location":{
                "type":"AzureBlobStorageLocation",
                "folderPath":{
                    "value":"@dataset().TriggerTime",
                    "type":"Expression"
                },
                "container":{
                    "value":"mycontainer",
                    "type":"Expression"
                }
            }
        }
    }
}

نموذج مشغل

{
    "name": "DailyTrigger",
    "properties": {
        "runtimeState": "Started",
        "pipelines": [
            {
                "pipelineReference": {
                    "referenceName": "cleanup_time_partitioned_folder",
                    "type": "PipelineReference"
                },
                "parameters": {
                    "TriggerTime": "@trigger().scheduledTime"
                }
            }
        ],
        "type": "ScheduleTrigger",
        "typeProperties": {
            "recurrence": {
                "frequency": "Day",
                "interval": 1,
                "startTime": "2018-12-13T00:00:00.000Z",
                "timeZone": "UTC",
                "schedule": {
                    "minutes": [
                        59
                    ],
                    "hours": [
                        23
                    ]
                }
            }
        }
    }
}

تنظيف الملفات منتهية الصلاحية التي تم تعديلها آخر مرة قبل 2018.1.1

يمكنك إنشاء مسار لتنظيف الملفات القديمة أو منتهية الصلاحية باستخدام عامل تصفية سمة الملف: "LastModified" في مجموعة البيانات.

نموذج للبنية الأساسية لبرنامج ربط العمليات التجارية

{
    "name":"CleanupExpiredFiles",
    "properties":{
        "activities":[
            {
                "name":"DeleteFilebyLastModified",
                "type":"Delete",
                "dependsOn":[

                ],
                "policy":{
                    "timeout":"7.00:00:00",
                    "retry":0,
                    "retryIntervalInSeconds":30,
                    "secureOutput":false,
                    "secureInput":false
                },
                "userProperties":[

                ],
                "typeProperties":{
                    "dataset":{
                        "referenceName":"BlobFilesLastModifiedBefore201811",
                        "type":"DatasetReference"
                    },
                    "logStorageSettings":{
                        "linkedServiceName":{
                            "referenceName":"BloblinkedService",
                            "type":"LinkedServiceReference"
                        },
                        "path":"mycontainer/log"
                    },
                    "enableLogging":true,
                    "storeSettings":{
                        "type":"AzureBlobStorageReadSettings",
                        "recursive":true,
                        "modifiedDatetimeEnd":"2018-01-01T00:00:00.000Z"
                    }
                }
            }
        ],
        "annotations":[

        ]
    }
}

نموذج مجموعة بيانات

{
    "name":"BlobFilesLastModifiedBefore201811",
    "properties":{
        "linkedServiceName":{
            "referenceName":"BloblinkedService",
            "type":"LinkedServiceReference"
        },
        "annotations":[

        ],
        "type":"Binary",
        "typeProperties":{
            "location":{
                "type":"AzureBlobStorageLocation",
                "fileName":"*",
                "folderPath":"mydirectory",
                "container":"mycontainer"
            }
        }
    }
}

نقل الملفات عن طريق ربط Copy activity وDelete

يمكنك نقل ملف باستخدام Copy activity لنسخ ملف ثم نشاط حذف لحذف ملف في خط الأنابيب. عندما ترغب في نقل عدة ملفات، يمكنك استخدام GetMetadata activity + Filter activity + Foreach activity + Copy activity + Delete activity كما في العينة التالية.

إشعار

إذا أردت نقل المجلد بالكامل عن طريق تعريف مجموعة بيانات تحتوي فقط على مسار المجلد، ثم استخدام Copy activity وDelete activity للإشارة إلى نفس مجموعة البيانات التي تمثل مجلدا، عليك أن تكون حذرا جدا. يجب التأكد من أنه لن يكون هناك أي ملفات جديدة تصل إلى المجلد بين عملية النسخ وعملية الحذف. إذا كانت الملفات الجديدة تصل إلى المجلد في اللحظة التي أكمل فيها نشاط النسخة للتو مهمة النسخ ولكن لم يبدأ نشاط الحذف، فقد يقوم نشاط الحذف بحذف هذا الملف حديث الوصول الذي لم يتم نسخه إلى الوجهة بعد عن طريق حذف المجلد بأكمله.

نموذج للبنية الأساسية لبرنامج ربط العمليات التجارية

{
    "name":"MoveFiles",
    "properties":{
        "activities":[
            {
                "name":"GetFileList",
                "type":"GetMetadata",
                "dependsOn":[

                ],
                "policy":{
                    "timeout":"7.00:00:00",
                    "retry":0,
                    "retryIntervalInSeconds":30,
                    "secureOutput":false,
                    "secureInput":false
                },
                "userProperties":[

                ],
                "typeProperties":{
                    "dataset":{
                        "referenceName":"OneSourceFolder",
                        "type":"DatasetReference",
                        "parameters":{
                            "Container":{
                                "value":"@pipeline().parameters.SourceStore_Location",
                                "type":"Expression"
                            },
                            "Directory":{
                                "value":"@pipeline().parameters.SourceStore_Directory",
                                "type":"Expression"
                            }
                        }
                    },
                    "fieldList":[
                        "childItems"
                    ],
                    "storeSettings":{
                        "type":"AzureBlobStorageReadSettings",
                        "recursive":true
                    },
                    "formatSettings":{
                        "type":"BinaryReadSettings"
                    }
                }
            },
            {
                "name":"FilterFiles",
                "type":"Filter",
                "dependsOn":[
                    {
                        "activity":"GetFileList",
                        "dependencyConditions":[
                            "Succeeded"
                        ]
                    }
                ],
                "userProperties":[

                ],
                "typeProperties":{
                    "items":{
                        "value":"@activity('GetFileList').output.childItems",
                        "type":"Expression"
                    },
                    "condition":{
                        "value":"@equals(item().type, 'File')",
                        "type":"Expression"
                    }
                }
            },
            {
                "name":"ForEachFile",
                "type":"ForEach",
                "dependsOn":[
                    {
                        "activity":"FilterFiles",
                        "dependencyConditions":[
                            "Succeeded"
                        ]
                    }
                ],
                "userProperties":[

                ],
                "typeProperties":{
                    "items":{
                        "value":"@activity('FilterFiles').output.value",
                        "type":"Expression"
                    },
                    "batchCount":20,
                    "activities":[
                        {
                            "name":"CopyAFile",
                            "type":"Copy",
                            "dependsOn":[

                            ],
                            "policy":{
                                "timeout":"7.00:00:00",
                                "retry":0,
                                "retryIntervalInSeconds":30,
                                "secureOutput":false,
                                "secureInput":false
                            },
                            "userProperties":[

                            ],
                            "typeProperties":{
                                "source":{
                                    "type":"BinarySource",
                                    "storeSettings":{
                                        "type":"AzureBlobStorageReadSettings",
                                        "recursive":false,
                                        "deleteFilesAfterCompletion":false
                                    },
                                    "formatSettings":{
                                        "type":"BinaryReadSettings"
                                    },
                                    "recursive":false
                                },
                                "sink":{
                                    "type":"BinarySink",
                                    "storeSettings":{
                                        "type":"AzureBlobStorageWriteSettings"
                                    }
                                },
                                "enableStaging":false,
                                "dataIntegrationUnits":0
                            },
                            "inputs":[
                                {
                                    "referenceName":"OneSourceFile",
                                    "type":"DatasetReference",
                                    "parameters":{
                                        "Container":{
                                            "value":"@pipeline().parameters.SourceStore_Location",
                                            "type":"Expression"
                                        },
                                        "Directory":{
                                            "value":"@pipeline().parameters.SourceStore_Directory",
                                            "type":"Expression"
                                        },
                                        "filename":{
                                            "value":"@item().name",
                                            "type":"Expression"
                                        }
                                    }
                                }
                            ],
                            "outputs":[
                                {
                                    "referenceName":"OneDestinationFile",
                                    "type":"DatasetReference",
                                    "parameters":{
                                        "Container":{
                                            "value":"@pipeline().parameters.DestinationStore_Location",
                                            "type":"Expression"
                                        },
                                        "Directory":{
                                            "value":"@pipeline().parameters.DestinationStore_Directory",
                                            "type":"Expression"
                                        },
                                        "filename":{
                                            "value":"@item().name",
                                            "type":"Expression"
                                        }
                                    }
                                }
                            ]
                        },
                        {
                            "name":"DeleteAFile",
                            "type":"Delete",
                            "dependsOn":[
                                {
                                    "activity":"CopyAFile",
                                    "dependencyConditions":[
                                        "Succeeded"
                                    ]
                                }
                            ],
                            "policy":{
                                "timeout":"7.00:00:00",
                                "retry":0,
                                "retryIntervalInSeconds":30,
                                "secureOutput":false,
                                "secureInput":false
                            },
                            "userProperties":[

                            ],
                            "typeProperties":{
                                "dataset":{
                                    "referenceName":"OneSourceFile",
                                    "type":"DatasetReference",
                                    "parameters":{
                                        "Container":{
                                            "value":"@pipeline().parameters.SourceStore_Location",
                                            "type":"Expression"
                                        },
                                        "Directory":{
                                            "value":"@pipeline().parameters.SourceStore_Directory",
                                            "type":"Expression"
                                        },
                                        "filename":{
                                            "value":"@item().name",
                                            "type":"Expression"
                                        }
                                    }
                                },
                                "logStorageSettings":{
                                    "linkedServiceName":{
                                        "referenceName":"BloblinkedService",
                                        "type":"LinkedServiceReference"
                                    },
                                    "path":"container/log"
                                },
                                "enableLogging":true,
                                "storeSettings":{
                                    "type":"AzureBlobStorageReadSettings",
                                    "recursive":true
                                }
                            }
                        }
                    ]
                }
            }
        ],
        "parameters":{
            "SourceStore_Location":{
                "type":"String"
            },
            "SourceStore_Directory":{
                "type":"String"
            },
            "DestinationStore_Location":{
                "type":"String"
            },
            "DestinationStore_Directory":{
                "type":"String"
            }
        },
        "annotations":[

        ]
    }
}

نماذج مجموعات البيانات

مجموعة البيانات المستخدمة من قبل نشاط GetMetadata لتعداد قائمة الملفات.

{
    "name":"OneSourceFolder",
    "properties":{
        "linkedServiceName":{
            "referenceName":"AzureStorageLinkedService",
            "type":"LinkedServiceReference"
        },
        "parameters":{
            "Container":{
                "type":"String"
            },
            "Directory":{
                "type":"String"
            }
        },
        "annotations":[

        ],
        "type":"Binary",
        "typeProperties":{
            "location":{
                "type":"AzureBlobStorageLocation",
                "folderPath":{
                    "value":"@{dataset().Directory}",
                    "type":"Expression"
                },
                "container":{
                    "value":"@{dataset().Container}",
                    "type":"Expression"
                }
            }
        }
    }
}

مجموعة البيانات لمصدر البيانات المستخدم من قبل نشاط النسخ ونشاط الحذف.

{
    "name":"OneSourceFile",
    "properties":{
        "linkedServiceName":{
            "referenceName":"AzureStorageLinkedService",
            "type":"LinkedServiceReference"
        },
        "parameters":{
            "Container":{
                "type":"String"
            },
            "Directory":{
                "type":"String"
            },
            "filename":{
                "type":"string"
            }
        },
        "annotations":[

        ],
        "type":"Binary",
        "typeProperties":{
            "location":{
                "type":"AzureBlobStorageLocation",
                "fileName":{
                    "value":"@dataset().filename",
                    "type":"Expression"
                },
                "folderPath":{
                    "value":"@{dataset().Directory}",
                    "type":"Expression"
                },
                "container":{
                    "value":"@{dataset().Container}",
                    "type":"Expression"
                }
            }
        }
    }
}

مجموعة البيانات لوجهة البيانات المستخدمة من قبل نشاط النسخ.

{
    "name":"OneDestinationFile",
    "properties":{
        "linkedServiceName":{
            "referenceName":"AzureStorageLinkedService",
            "type":"LinkedServiceReference"
        },
        "parameters":{
            "Container":{
                "type":"String"
            },
            "Directory":{
                "type":"String"
            },
            "filename":{
                "type":"string"
            }
        },
        "annotations":[

        ],
        "type":"Binary",
        "typeProperties":{
            "location":{
                "type":"AzureBlobStorageLocation",
                "fileName":{
                    "value":"@dataset().filename",
                    "type":"Expression"
                },
                "folderPath":{
                    "value":"@{dataset().Directory}",
                    "type":"Expression"
                },
                "container":{
                    "value":"@{dataset().Container}",
                    "type":"Expression"
                }
            }
        }
    }
}

يمكنك أيضاً الحصول على القالب لنقل الملفات من هنا.

القيود المعروفة

  • لا يدعم نشاط الحذف حذف قائمة المجلدات الموضحة بواسطة حرف البدل.

  • عند استخدام عامل تصفية سمة الملف في نشاط الحذف: modifiedDatetimeStart وModifiedDatetimeEnd لتحديد الملفات المراد حذفها، تأكد من تعيين "wildcardFileName": "*" في نشاط الحذف أيضاً.

تعرف أكثر على نقل الملفات في خطوط أنابيب Azure Data Factory وSynapse.