Azure Data Factory ve Azure Synapse Analytics'te Silme Etkinliği

UYGULANANLAR: Azure Data Factory Azure Synapse Analytics

İpucu

Kuruluşlar için hepsi bir arada analiz çözümü olan Microsoft Fabric'te Data Factory'yi deneyin. Microsoft Fabric , veri taşımadan veri bilimine, gerçek zamanlı analize, iş zekasına ve raporlamaya kadar her şeyi kapsar. Yeni bir deneme sürümünü ücretsiz olarak başlatmayı öğrenin!

Şirket içi depolama depolarından veya bulut depolama depolarından dosya veya klasörleri silmek için Azure Data Factory'deki Silme Etkinliğini kullanabilirsiniz. Artık gerekli olmayan dosyaları temizlemek veya arşivlemek için bu etkinliği kullanın.

Uyarı

Silinen dosyalar veya klasörler geri yüklenemez (depolamada geçici silme etkinleştirilmediği sürece). Dosya veya klasörleri silmek için Silme etkinliğini kullanırken dikkatli olun.

En iyi yöntemler

Delete etkinliğini kullanmaya yönelik bazı öneriler şunlardır:

  • Gelecekte geri yüklemeniz gerekme ihtimaline karşı sil etkinliğiyle dosyalarınızı silmeden önce yedekleyin.

  • Hizmetin depolama deposundaki klasörleri veya dosyaları silmek için yazma izinlerine sahip olduğundan emin olun.

  • Aynı anda yazılan dosyaları silmediğinizden emin olun.

  • Şirket içi sistemdeki dosyaları veya klasörleri silmek istiyorsanız, 3.14'ten büyük bir sürüme sahip şirket içinde barındırılan tümleştirme çalışma zamanı kullandığınızdan emin olun.

Desteklenen veri depoları

Kullanıcı arabirimiyle Silme etkinliği oluşturma

İşlem hattında Delete etkinliği kullanmak için aşağıdaki adımları tamamlayın:

  1. İşlem hattı Etkinlikleri bölmesinde Sil'i arayın ve sil etkinliğini işlem hattı tuvaline sürükleyin.

  2. Tuvalde henüz seçili değilse yeni Sil etkinliğini ve ayrıntılarını düzenlemek için Kaynak sekmesini seçin.

    Shows the UI for a Delete activity.

  3. Mevcut bir veri kümesini seçin veya silinecek dosyaları belirten yeni bir Veri Kümesi oluşturun. Birden çok dosya seçilirse, isteğe bağlı olarak özyinelemeli silmeyi etkinleştirerek tüm alt klasörlerdeki verileri de silin. Ayrıca işlem için en fazla eşzamanlı bağlantı sayısını belirtebilirsiniz.

  4. İsteğe bağlı olarak Günlük ayarları sekmesini seçip var olan bir günlük hesabı bağlı hizmet konumunu seçerek veya gerçekleştirilen silme işlemlerinin sonuçlarını günlüğe kaydetmek için yeni bir günlük hesabı bağlı hizmet konumu oluşturarak günlüğü yapılandırın.

    Shows the  Logging settings  tab for a Delete activity.

Sözdizimi

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

Tür özellikleri

Özellik Açıklama Gerekli
veri kümesi Hangi dosyaların veya klasörün silineceğini belirlemek için veri kümesi başvurusu sağlar Yes
Özyinelemeli Dosyaların alt klasörlerden özyinelemeli olarak mı yoksa yalnızca belirtilen klasörden mi silindiğini gösterir. Hayır Varsayılan değer: false.
maxConcurrent Bağlan ions Klasör veya dosyaları silmek için depolama deposuna eşzamanlı olarak bağlanacak bağlantıların sayısı. Hayır Varsayılan değer: 1.
günlüğü etkinleştirme Silinen klasörü veya dosya adlarını kaydetmeniz gerekip gerekmediğini gösterir. Doğruysa, günlük dosyasını kaydedecek bir depolama hesabı sağlamanız gerekir; böylece günlük dosyasını okuyarak Delete etkinliğinin davranışlarını izleyebilirsiniz. Hayır
günlük DepolamaAyarlar Yalnızca enablelogging = true olduğunda geçerlidir.

Delete etkinliği tarafından silinen klasör veya dosya adlarını içeren günlük dosyasını kaydetmek istediğiniz yere belirtilebilen bir depolama özellikleri grubu.
Hayır
linkedServiceName Yalnızca enablelogging = true olduğunda geçerlidir.

Sil etkinliği tarafından silinen klasör veya dosya adlarını içeren günlük dosyasını depolamak için Azure Depolama, Azure Data Lake Storage 1. Nesil veya Azure Data Lake Storage 2. Nesil bağlı hizmeti. Silme etkinliği tarafından dosyaları silmek için kullanılan tümleştirme çalışma zamanı türüyle yapılandırılması gerektiğini unutmayın.
Hayır
yol Yalnızca enablelogging = true olduğunda geçerlidir.

Günlük dosyasını depolama hesabınıza kaydetme yolu. Yol sağlamazsanız, hizmet sizin için bir kapsayıcı oluşturur.
Hayır

İzleme

Delete etkinliğinin sonuçlarını görebileceğiniz ve izleyebileceğiniz iki yer vardır:

  • Delete etkinliğinin çıkışından.
  • Günlük dosyasından.

Delete etkinliğinin örnek çıktısı

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

Delete etkinliğinin örnek günlük dosyası

Veri Akışı Adı Kategori Durum Hata
test1/yyy.json Dosya Silinme
test2/hello789.txt Dosya Silinme
test2/test3/hello000.txt Dosya Silinme
test2/test3/zzz.json Dosya Silinme

Delete etkinliğini kullanma örnekleri

Belirli klasörleri veya dosyaları silme

Depo aşağıdaki klasör yapısına sahiptir:

Kök/
    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

Şimdi, veri kümesinden farklı özellik değerinin ve Delete etkinliğinin birleşimiyle klasör veya dosyaları silmek için Delete etkinliğini kullanıyorsunuz:

folderPath fileName Özyinelemeli Çıktı
Kök/ Folder_A_2 NULL False Kök/
    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
Kök/ Folder_A_2 NULL True Kök/
    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
Kök/ Folder_A_2 *.Txt False Kök/
    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
Kök/ Folder_A_2 *.Txt True Kök/
    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

Zaman bölümlenmiş klasörü veya dosyaları düzenli aralıklarla temizleme

Bölümlenmiş zaman klasörünü veya dosyalarını düzenli aralıklarla temizlemek için bir işlem hattı oluşturabilirsiniz. Örneğin, klasör yapısı şuna benzer: /mycontainer/2018/12/14/*.csv. Her işlem hattı çalıştırmasında hangi klasörün veya dosyaların silinmesi gerektiğini belirlemek için zamanlama tetikleyicisinden hizmet sistemi değişkenini kullanabilirsiniz.

Örnek işlem hattı

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

        ]
    }
}

Örnek veri kümesi

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

Örnek tetikleyici

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

En son 2018.1.1'in öncesinde değiştirilmiş olan süresi dolan dosyaları temizleme

Veri kümesinde "LastModified" dosya özniteliği filtresini kullanarak eski veya süresi dolmuş dosyaları temizlemek için bir işlem hattı oluşturabilirsiniz.

Örnek işlem hattı

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

        ]
    }
}

Örnek veri kümesi

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

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

Kopyalama etkinliği ve Delete etkinliğini zincirleyerek dosyaları taşıma

Bir dosyayı kopyalamak için Kopyalama etkinliği kullanarak ve ardından işlem hattındaki bir dosyayı silmek için Delete etkinliği kullanarak dosyayı taşıyabilirsiniz. Birden çok dosyayı taşımak istediğinizde, aşağıdaki örnekte olduğu gibi GetMetadata etkinliği + Filtre etkinliği + Foreach etkinliği + Kopyalama etkinliği + Silme etkinliğini kullanabilirsiniz.

Not

Yalnızca klasör yolu içeren bir veri kümesi tanımlayıp bir klasörü temsil eden aynı veri kümesine başvurmak için bir Kopyalama etkinliği ve Delete etkinliği kullanarak klasörün tamamını taşımak istiyorsanız, çok dikkatli olmanız gerekir. Kopyalama işlemi ile silme işlemi arasında klasöre yeni dosya gelmediğinden emin olmanız gerekir. Kopyalama etkinliğinizin kopyalama işini yeni tamamladığı ancak Delete etkinliği başlatılmadığı anda klasöre yeni dosyalar gelirse, Delete etkinliği henüz hedefe kopyalanmamış olan yeni gelen dosyayı klasörün tamamını silerek silebilir.

Örnek işlem hattı

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

        ]
    }
}

Örnek veri kümeleri

GetMetadata etkinliği tarafından dosya listesini listelemek için kullanılan veri kümesi.

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

Kopyalama etkinliği ve Delete etkinliği tarafından kullanılan veri kaynağı için veri kümesi.

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

Kopyalama etkinliği tarafından kullanılan veri hedefi için veri kümesi.

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

Dosyaları taşımak için şablonu buradan da alabilirsiniz.

Bilinen sınırlamalar

  • Silme etkinliği joker karakterle açıklanan klasörlerin listesini silmeyi desteklemez.

  • Silme etkinliğinde dosya özniteliği filtresi kullanılırken: silinecek dosyaları seçmek için modifiedDatetimeStart ve modifiedDatetimeEnd, silme etkinliğinde de "wildcardFileName": "*" değerini ayarladığınızdan emin olun.

Azure Data Factory ve Synapse işlem hatlarında dosyaları taşıma hakkında daha fazla bilgi edinin.