Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tip
Data Factory di Microsoft Fabric adalah generasi Azure Data Factory berikutnya, dengan arsitektur yang lebih sederhana, AI bawaan, dan fitur baru. Jika Anda baru menggunakan integrasi data, mulailah dengan Fabric Data Factory. Beban kerja ADF yang ada dapat ditingkatkan ke Fabric untuk mengakses kemampuan baru di seluruh ilmu data, analitik real time, dan pelaporan.
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 terlebih dahulu 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
- Penyimpanan Azure Blob
- 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 Awan 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 |
| rekursif | 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. | Tidak |
| 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. |
Tidak |
| Nama Layanan Tertaut | 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 seperti yang digunakan dalam aktivitas penghapusan untuk menghapus file. |
Tidak |
| 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. |
Tidak |
Pemantauan
Ada dua tempat di mana Anda dapat melihat dan memantau hasil aktivitas Hapus:
- Dari output aktivitas Hapus.
- Dari berkas 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
Toko 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 | rekursif | Keluaran |
|---|---|---|---|
| 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.
Pipelin contoh
{
"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 kumpulan 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 contoh
{
"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.
Pipelin contoh
{
"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 kumpulan data
{
"name":"BlobFilesLastModifiedBefore201811",
"properties":{
"linkedServiceName":{
"referenceName":"BloblinkedService",
"type":"LinkedServiceReference"
},
"annotations":[
],
"type":"Binary",
"typeProperties":{
"location":{
"type":"AzureBlobStorageLocation",
"fileName":"*",
"folderPath":"mydirectory",
"container":"mycontainer"
}
}
}
}
Memindahkan file dengan menautkan aktivitas Salin dan aktivitas Hapus
Anda dapat memindahkan file dengan menggunakan Copy activity untuk menyalin file lalu aktivitas Hapus untuk menghapus file dalam alur. Saat ingin memindahkan beberapa file, Anda dapat menggunakan aktivitas GetMetadata + Aktivitas filter + aktivitas Foreach + Copy activity + Hapus seperti dalam sampel berikut.
Catatan
Jika Anda ingin memindahkan seluruh folder dengan menentukan himpunan data yang hanya berisi jalur folder, lalu menggunakan Copy activity dan aktivitas Hapus untuk mereferensikan 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.
Pipelin contoh
{
"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 yang digunakan oleh aktivitas salin untuk tujuan akhir data.
{
"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
Fungsi penghapusan tidak mendukung penghapusan daftar folder yang dijelaskan oleh wildcard.
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 alur Azure Data Factory dan Synapse.