適用対象:
Azure Data Factory
Azure Synapse Analytics
ヒント
Data Factory in Microsoft Fabric は、よりシンプルなアーキテクチャ、組み込みの AI、および新機能を備えた次世代のAzure Data Factoryです。 データ統合を初めて使用する場合は、Fabric Data Factory から始めます。 既存の ADF ワークロードをFabricにアップグレードして、データ サイエンス、リアルタイム分析、レポートの新機能にアクセスできます。
Azure Data Factoryの削除アクティビティを使用して、オンプレミスのストレージ ストアまたはクラウド ストレージ ストアからファイルまたはフォルダーを削除できます。 不要になったファイルをクリーンアップしたりアーカイブしたりするには、このアクティビティを使用します。
警告
削除されたファイルまたはフォルダーを復元することはできません (記憶域で論理的な削除が有効になっている場合を除きます)。 Delete アクティビティを使用してファイルまたはフォルダーを削除するときは注意してください。
ベスト プラクティス
以下に、Delete アクティビティの使用に関する推奨事項を示します。
将来復元する必要が生じた場合に備えて、Delete アクティビティを使用して削除する前に、ファイルをバックアップする。
そのサービスが、ストレージ ストアからフォルダーまたはファイルを削除するための書き込み権限を持っていることを確認する。
同時に書き込まれているファイルを削除しないように注意してください。
オンプレミス システムからファイルやフォルダーを削除する場合は、バージョン 3.14 以上のセルフホステッド統合ランタイムを使用していることを確認してください。
サポートされているデータ ストア
- Azure Blob ストレージ
- Azure Data Lake Storage Gen1
- Azure Data Lake Storage Gen2
- Azure Files
- ファイル システム
- FTP
- SFTP
- Microsoft Fabric Lakehouse
- アマゾンS3
- Amazon S3 互換ストレージ
- Google Cloud Storage
- Oracle Cloud Storage
- HDFS
UI を使用して Delete アクティビティを作成する
パイプライン内で Delete アクティビティを使用するには、次の手順を実行します:
パイプラインの [アクティビティ] ペイン内で Delete を検索し、Delete アクティビティをパイプライン キャンバスにドラッグします。
まだ選択されていない場合は、キャンバス上で新しい削除アクティビティを選択し、その [ソース] タブを選択して詳細を編集します。
削除するファイルを指定して、既存のデータセットを選択するか、新しいデータセットを作成します。 複数のファイルを選択した場合は、必要に応じて再帰的な削除を有効にします。これにより子フォルダー内のデータも削除されます。 操作の同時接続の最大数を指定できます。
必要に応じて、[ログ設定] タブを選択し、既存のログ アカウントまたは新しく作成したログ アカウントにリンクされたサービスの場所を選択し、実行された削除操作の結果をログに記録します。
構文
{
"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>"
}
}
}
型のプロパティ
| プロパティ | 内容 | 必須 |
|---|---|---|
| データセット | 削除するファイルまたはフォルダーを決定するデータセット参照を指定します。 | はい |
| recursive | ファイルをサブフォルダーから再帰的に削除するか、指定したフォルダーからのみ削除するかを指定します。 | いいえ。 既定では、 falseです。 |
| maxConcurrentConnections | フォルダーまたはファイルを削除するために同時にストレージ ストアに接続する接続の数。 | いいえ。 既定では、 1です。 |
| ログの有効化 | 削除されたフォルダー名やファイル名を記録する必要があるかどうかを示します。 true の場合は、さらに、ログ ファイルを保存するストレージ アカウントを指定する必要があります。それにより、ログ ファイルを読み取って Delete アクティビティの動作を追跡することができます。 | いいえ |
| ログストレージ設定 | enablelogging = true の場合にのみ適用されます。 削除アクティビティによって削除されたフォルダーやファイルの名前を含むログ ファイルの保存場所を指定できるストレージ プロパティのグループ。 |
いいえ |
| linkedServiceName | enablelogging = true の場合にのみ適用されます。 Delete アクティビティによって削除されたフォルダーまたはファイル名を含むログ ファイルを格納する、 | いいえ |
| パス | enablelogging = true の場合にのみ適用されます。 ストレージ アカウント内のログ ファイルを保存するパス。 パスを指定しない場合、サービスがコンテナーを作成します。 |
いいえ |
監視
Delete アクティビティの結果は、次の 2 つの場所から表示および監視できます。
- Delete アクティビティの出力から。
- ログ ファイルから。
Delete アクティビティの出力例
{
"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 アクティビティのログ ファイル例
| 名前 | カテゴリ | ステータス | エラー |
|---|---|---|---|
| test1/yyy.json | ファイル | 削除済み | |
| test2/hello789.txt | ファイル | 削除済み | |
| test2/test3/hello000.txt | ファイル | 削除済み | |
| test2/test3/zzz.json | ファイル | 削除済み |
Delete アクティビティの使用例
特定のフォルダーまたはファイルを削除する
ストアには、次のフォルダー構造があります。
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
これで、データセットの異なるプロパティ値の組み合わせと削除アクティビティを使用して、フォルダーやファイルを削除できるようになりました。
| フォルダパス | ファイル名 | recursive | 出力 |
|---|---|---|---|
| Root/ Folder_A_2 | NULL | 偽 | 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 | True | Root/ Folder_A_1/ 1.txt 2.txt 3.csv |
| Root/ Folder_A_2 | *.txt | 偽 | 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 | True | Root/ Folder_A_1/ 1.txt 2.txt 3.csv Folder_A_2/ 5.csv Folder_B_1/ 7.csv Folder_B_2/ |
時間でパーティション分割されたフォルダーまたはファイルを定期的にクリーンアップする
時間でパーティション分割されたフォルダーまたはファイルを定期的にクリーンアップするためのパイプラインを作成することができます。 たとえば、フォルダー構造は /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 アクティビティと Delete アクティビティを連結してファイルを移動する
ファイルを移動するには、Copy アクティビティを使用してファイルをコピーし、次に Delete アクティビティを使用してパイプライン内のファイルを削除します。 複数のファイルを移動する場合は、次の例のように、GetMetadata アクティビティ + フィルター アクティビティ + Foreach アクティビティ + Copy アクティビティ + Delete アクティビティを使用できます。
注意
フォルダー パスのみを含むデータセットを定義し、Copy アクティビティと Delete アクティビティを使用してフォルダーを表す同じデータセットを参照することで、フォルダー全体を移動する場合は、非常に注意する必要があります。 コピー操作と削除操作の間にフォルダーに到着する新しいファイルが ない ことを確認する必要があります。 新しいファイルがフォルダーに到着した時点で、コピーアクティビティがコピージョブを完了しており、削除アクティビティがまだ開始されていない場合、削除アクティビティはフォルダー全体を削除することで、まだコピー先にコピーされていない新しく到着したファイルを削除してしまう可能性があります。
サンプル パイプライン
{
"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"
}
}
}
}
}
Copy アクティビティと Delete アクティビティによって使用されるデータ ソースのデータセット。
{
"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"
}
}
}
}
}
Copy アクティビティによって使用されるデータ宛先のデータセット。
{
"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 パイプラインでのファイルの移動の詳細について説明します。