如何使用ADF删除Azure Gen 2数据湖中的文件夹

kninwzqo  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(232)

我很难从adf管道中删除数据湖中的文件夹。我尝试了类似的方法,因为我通过使用get metadata活动和delete活动中的ForEach活动来删除文件,无法完成。
所以每天我写一个快照数据和文件路径看起来像这样-〉快照/表名/文件卸载时的日期-这是基本的GETUTCDATE格式yyyyMMddHHmmss
所以路径= snapshot/tablename/yyyyMMddHHmmss/*.parquet
我的目标是删除tablename文件夹中所有超过5天的文件夹。
任何提示赞赏。

uajslkp6

uajslkp61#

我的目标是删除tablename文件夹中所有超过5天的文件夹。
您可以通过使用下面的过滤器活动来实现您的要求。
首先创建一个整数参数,值为-(n-1),其中n是天数。然后使用以下表达式在set变量中创建yyyyMMdd的最后第n天。
@addDays(utcnow(),pipeline().parameters.ndays,'yyyyMMdd')

然后使用 meta活动获取文件夹列表。

这些是我的文件夹:

现在,将此子项数组提供给筛选活动。筛选活动筛选超过5天的文件夹名称。

过滤项:@activity('Get Metadata1').output.childItems
过滤条件:@greater(int(variables('last_5thday')), int(substring(item().name,0,8)))

Filter将给予如下的输出数组。

将这个数组作为@activity('Filter1').output.Value交给ForEach,并在ForEach内部使用delete活动。
对于删除活动,使用dataset参数作为文件夹名称,如下所示。

给予@item().name作为ForEach中delete活动的参数值。

您可以看到超过5天的文件夹在管道执行后被删除。

以下是我的Pipeline JSON,供大家参考:

{
"name": "Pipeline 1",
"properties": {
    "activities": [
        {
            "name": "Get Metadata1",
            "type": "GetMetadata",
            "dependsOn": [
                {
                    "activity": "Set variable1",
                    "dependencyConditions": [
                        "Succeeded"
                    ]
                }
            ],
            "policy": {
                "timeout": "0.12:00:00",
                "retry": 0,
                "retryIntervalInSeconds": 30,
                "secureOutput": false,
                "secureInput": false
            },
            "userProperties": [],
            "typeProperties": {
                "dataset": {
                    "referenceName": "source_folder",
                    "type": "DatasetReference"
                },
                "fieldList": [
                    "childItems"
                ],
                "storeSettings": {
                    "type": "AzureBlobFSReadSettings",
                    "enablePartitionDiscovery": false
                },
                "formatSettings": {
                    "type": "DelimitedTextReadSettings"
                }
            }
        },
        {
            "name": "Set variable1",
            "type": "SetVariable",
            "dependsOn": [],
            "userProperties": [],
            "typeProperties": {
                "variableName": "last_5thday",
                "value": {
                    "value": "@addDays(utcnow(),pipeline().parameters.ndays,'yyyyMMdd')",
                    "type": "Expression"
                }
            }
        },
        {
            "name": "Filter1",
            "type": "Filter",
            "dependsOn": [
                {
                    "activity": "Get Metadata1",
                    "dependencyConditions": [
                        "Succeeded"
                    ]
                }
            ],
            "userProperties": [],
            "typeProperties": {
                "items": {
                    "value": "@activity('Get Metadata1').output.childItems",
                    "type": "Expression"
                },
                "condition": {
                    "value": "@greater(int(variables('last_5thday')), int(substring(item().name,0,8)))",
                    "type": "Expression"
                }
            }
        },
        {
            "name": "ForEach1",
            "type": "ForEach",
            "dependsOn": [
                {
                    "activity": "Filter1",
                    "dependencyConditions": [
                        "Succeeded"
                    ]
                }
            ],
            "userProperties": [],
            "typeProperties": {
                "items": {
                    "value": "@activity('Filter1').output.Value",
                    "type": "Expression"
                },
                "isSequential": true,
                "activities": [
                    {
                        "name": "Delete1",
                        "type": "Delete",
                        "dependsOn": [],
                        "policy": {
                            "timeout": "0.12:00:00",
                            "retry": 0,
                            "retryIntervalInSeconds": 30,
                            "secureOutput": false,
                            "secureInput": false
                        },
                        "userProperties": [],
                        "typeProperties": {
                            "dataset": {
                                "referenceName": "Binary1",
                                "type": "DatasetReference",
                                "parameters": {
                                    "folder": {
                                        "value": "@item().name",
                                        "type": "Expression"
                                    }
                                }
                            },
                            "enableLogging": false,
                            "storeSettings": {
                                "type": "AzureBlobFSReadSettings",
                                "recursive": true,
                                "enablePartitionDiscovery": false
                            }
                        }
                    }
                ]
            }
        }
    ],
    "parameters": {
        "ndays": {
            "type": "int",
            "defaultValue": -4
        }
    },
    "variables": {
        "last_5thday": {
            "type": "String"
        },
        "test": {
            "type": "String"
        }
    },
    "annotations": []
}
}
62lalag4

62lalag42#

您可以尝试以下方法:
1.添加int数据类型的管道参数“Iteration”,其值为“-5”
1.添加具有项表达式的foreach活动为@createArray(1,2,3,4,5)
1.在foreach中,使用通配符文件路径@concat(addDays(utcNow(),add(pipeline().parameters.Iteration,item()),'yyyyMMdd*'),'*.parquet')添加删除活动
如果需要,可以根据文件路径调整表达式。

相关问题