Menghapus Aktivitas 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!
Anda dapat menggunakan Aktivitas Hapus di Azure Data Factory untuk menghapus file atau folder dari penyimpanan lokal atau penyimpanan cloud. Gunakan aktivitas ini untuk membersihkan atau mengarsipkan file saat file tidak lagi diperlukan.
Peringatan
File atau folder yang dihapus tidak dapat dipulihkan (kecuali penyimpanan mengaktifkan penghapusan sementara). Berhati-hatilah saat menggunakan aktivitas Hapus untuk menghapus file atau folder.
Praktik terbaik
Berikut adalah beberapa rekomendasi untuk menggunakan aktivitas Hapus:
Cadangkan file Anda sebelum menghapusnya dengan aktivitas Hapus, untuk berjaga-jaga jika Anda perlu memulihkannya di masa mendatang.
Pastikan layanan memiliki izin tulis untuk menghapus folder atau file dari penyimpanan.
Pastikan Anda tidak menghapus file yang sedang ditulis secara bersamaan.
Jika Anda ingin menghapus file atau folder dari sistem lokal, pastikan Anda menggunakan runtime integrasi yang dihost sendiri dengan versi yang lebih besar dari 3.14.
Penyimpanan data yang didukung
- Azure Blob Storage
- Azure Data Lake Storage Gen1
- Azure Data Lake Storage Gen2
- Azure Files
- Sistem File
- FTP
- SFTP
- Microsoft Fabric Lakehouse
- Amazon S3
- Penyimpanan yang Kompatibel dengan Amazon S3
- Penyimpanan Cloud Google
- Penyimpanan Cloud Oracle
- HDFS
Membuat aktivitas Hapus dengan UI
Untuk menggunakan aktivitas Hapus dalam alur, selesaikan langkah-langkah berikut:
Telusuri Hapus di panel Aktivitas alur, dan seret aktivitas Hapus ke kanvas alur.
Pilih aktivitas Hapus baru di kanvas jika belum dipilih, dan tab Sumbernya, untuk mengedit detailnya.
Pilih Himpunan data yang sudah ada atau buat Himpunan Data baru yang menentukan file yang akan dihapus. Jika beberapa file dipilih, secara opsional aktifkan penghapusan rekursif, yang juga menghapus data di folder turunan mana pun. Anda juga dapat menentukan jumlah maksimum koneksi bersamaan untuk operasi.
Konfigurasikan pencatatan secara opsional dengan memilih tab Pengaturan pengelogan dan memilih lokasi layanan tertaut akun pengelogan baru untuk mencatat hasil operasi penghapusan yang dilakukan.
Sintaks
{
"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>"
}
}
}
Properti jenis
Properti | Deskripsi | Wajib diisi |
---|---|---|
himpunan data | Menyediakan referensi himpunan data untuk menentukan file atau folder mana yang akan dihapus | Ya |
recursive | Menunjukkan apakah file dihapus secara rekursif dari subfolder atau hanya dari folder tertentu. | Tidak. Default adalah false . |
maxConcurrentConnections | Jumlah koneksi yang akan disambungkan ke penyimpanan secara bersamaan untuk menghapus folder atau file. | Tidak. Default adalah 1 . |
aktifkan pengelogan | Menunjukkan apakah Anda perlu merekam folder atau nama file yang dihapus. Jika diatur ke true, Anda perlu menyediakan akun penyimpanan lebih lanjut untuk menyimpan file log, sehingga Anda dapat melacak perilaku aktivitas Hapus dengan membaca file log. | No |
logStorageSettings | Hanya berlaku saat enablelogging = true. Sekelompok properti penyimpanan yang dapat ditentukan di mana Anda ingin menyimpan file log yang berisi folder atau nama file yang dihapus oleh aktivitas Hapus. |
No |
linkedServiceName | Hanya berlaku saat enablelogging = true. Layanan tertaut Azure Storage, Azure Data Lake Storage Gen1, atau Azure Data Lake Storage Gen2 untuk menyimpan file log yang berisi folder atau nama file yang dihapus oleh aktivitas Hapus. Ketahuilah bahwa itu harus dikonfigurasi dengan jenis Integration Runtime yang sama dari yang digunakan oleh aktivitas hapus untuk menghapus file. |
No |
jalan | Hanya berlaku saat enablelogging = true. Jalur untuk menyimpan file log di akun penyimpanan Anda. Jika Anda tidak menyediakan jalur, layanan akan membuat kontainer untuk Anda. |
No |
Pemantauan
Ada dua tempat di mana Anda dapat melihat dan memantau hasil aktivitas Hapus:
- Dari output aktivitas Hapus.
- Dari file log.
Sampel output aktivitas Hapus
{
"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
}
Sampel file log aktivitas Hapus
Nama | Kategori | Status | Kesalahan |
---|---|---|---|
test1/yyy.json | File | Dihapus | |
test2/hello789.txt | File | Dihapus | |
test2/test3/hello000.txt | File | Dihapus | |
test2/test3/zzz.json | File | Dihapus |
Contoh penggunaan aktivitas Hapus
Menghapus folder atau file tertentu
Penyimpanan memiliki struktur folder berikut ini:
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
Sekarang Anda menggunakan aktivitas Hapus untuk menghapus folder atau file dengan kombinasi nilai properti yang berbeda dari himpunan data dan aktivitas Hapus:
folderPath | fileName | recursive | Output |
---|---|---|---|
Root/ Folder_A_2 | NULL | Salah | Root/ Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ Folder_B_1/ 6.txt 7.csv Folder_B_2/ 8.txt |
Root/ Folder_A_2 | NULL | Benar | Root/ Folder_A_1/ 1.txt 2.txt 3.csv |
Root/ Folder_A_2 | *.txt | Salah | Root/ Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ 5.csv Folder_B_1/ 6.txt 7.csv Folder_B_2/ 8.txt |
Root/ Folder_A_2 | *.txt | Benar | Root/ Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ 5.csv Folder_B_1/ 7.csv Folder_B_2/ |
Membersihkan folder atau file yang dipartisi waktu secara berkala
Anda dapat membuat alur untuk membersihkan folder atau file yang dipartisi secara berkala. Misalnya, struktur folder mirip dengan: /mycontainer/2018/12/14/*.csv
. Anda dapat menggunakan variabel sistem layanan dari pemicu jadwal untuk mengidentifikasi folder atau file mana yang harus dihapus di setiap eksekusi alur.
Alur sampel
{
"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":[
]
}
}
Sampel himpunan data
{
"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"
}
}
}
}
}
Pemicu sampel
{
"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
]
}
}
}
}
}
Bersihkan file kedaluwarsa yang terakhir dimodifikasi sebelum 2018.1.1
Anda dapat membuat alur untuk membersihkan file lama atau kedaluwarsa dengan menggunakan filter atribut file: "LastModified" dalam himpunan data.
Alur sampel
{
"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":[
]
}
}
Sampel himpunan data
{
"name":"BlobFilesLastModifiedBefore201811",
"properties":{
"linkedServiceName":{
"referenceName":"BloblinkedService",
"type":"LinkedServiceReference"
},
"annotations":[
],
"type":"Binary",
"typeProperties":{
"location":{
"type":"AzureBlobStorageLocation",
"fileName":"*",
"folderPath":"mydirectory",
"container":"mycontainer"
}
}
}
}
Memindahkan file dengan merantai aktivitas Salin dan aktivitas Hapus
Anda dapat memindahkan file dengan menggunakan aktivitas Salin untuk menyalin file lalu aktivitas Hapus untuk menghapus file dalam alur. Saat Anda ingin memindahkan beberapa file, Anda dapat menggunakan aktivitas GetMetadata + aktivitas Filter + aktivitas Foreach + aktivitas Salin + aktivitas Hapus seperti dalam sampel berikut.
Catatan
Jika Anda ingin memindahkan seluruh folder dengan menentukan himpunan data yang hanya berisi jalur folder, lalu menggunakan aktivitas Salin dan aktivitas Hapus untuk merujuk ke himpunan data yang sama yang mewakili folder, Anda harus sangat berhati-hati. Anda harus memastikan bahwa tidak akan ada file baru yang masuk ke folder antara operasi salin dan operasi hapus. Jika file baru masuk di folder saat aktivitas salin Anda baru saja menyelesaikan pekerjaan penyalinan tetapi aktivitas Hapus belum dimulai, aktivitas Hapus mungkin akan menghapus file yang baru masuk ini yang BELUM disalin ke tujuan dengan menghapus seluruh folder.
Alur sampel
{
"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":[
]
}
}
Sampel himpunan data
Himpunan data yang digunakan oleh aktivitas GetMetadata untuk menghitung daftar file.
{
"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"
}
}
}
}
}
Himpunan data untuk sumber data yang digunakan oleh aktivitas salin dan aktivitas Hapus.
{
"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"
}
}
}
}
}
Himpunan data untuk tujuan data yang digunakan oleh aktivitas salin.
{
"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"
}
}
}
}
}
Anda juga bisa mendapatkan templat untuk memindahkan file dari sini.
Pembatasan yang diketahui
Aktivitas penghapusan tidak mendukung penghapusan daftar folder yang dijelaskan oleh kartubebas.
Saat menggunakan filter atribut file dalam aktivitas hapus: modifiedDatetimeStart dan modifiedDatetimeEnd untuk memilih file yang akan dihapus, pastikan untuk mengatur "wildcardFileName": "*" dalam aktivitas hapus juga.
Konten terkait
Pelajari selengkapnya tentang memindahkan file di Azure Data Factory dan alur Synapse.