随着时间推移,数据集中可能积累大量过期或无用的元数据,例如历史日志、临时文件或已删除原始文件对应的元数据。这些冗余数据不仅占用存储空间,还可能降低检索效率。为优化资源管理,本文将指导您如何在数据集中批量删除不再需要的文件元数据。
前提条件
已开通OSS服务、创建存储空间并上传文件到存储空间。具体操作,请参见控制台上传文件。
已通过智能媒体管理控制台创建项目。
您也可以调用API接口CreateProject - 创建项目。
您可以调用ListProjects - 列出所有项目信息的列表接口列出指定地域下已创建的所有项目信息。
已根据使用场景为文件建立元数据索引。
注意事项
权限管理:请确保您所使用的AccessKey具备对目标数据集的操作权限。
异常处理:脚本中对异常进行了简单打印,建议您在生产环境中完善异常处理逻辑。
数据安全:批量删除操作不可逆,请您在执行前确认操作范围,避免误删重要数据。
操作步骤
目前,智能媒体管理控制台暂未提供批量删除数据集中元数据的功能。如需实现此操作,请参考本文进行处理。
步骤一:安装IMM Python SDK
环境要求
请确保您的 Python 版本为 3.7 或更高版本。您可以通过以下命令检查当前 Python 版本:
python --version
安装方式
使用
pip
命令安装 IMM Python SDK 的指定版本(4.6.2):pip install alibabacloud_imm20200930==4.6.2
更多信息,可参考智能媒体管理。
步骤二:配置环境变量
完成创建AccessKey后,您需要配置环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID
和 ALIBABA_CLOUD_ACCESS_KEY_SECRET
。
阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
步骤三:运行元数据批量删除脚本
请按照以下步骤完成代码的配置和执行,以实现对数据集中元数据的批量删除。
保存代码文件。
请将下文代码示例保存为文件
delete_dataset_file_meta.py
。# -*- coding:utf-8-* import os from alibabacloud_imm20200930.client import Client as imm20200930Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_imm20200930 import models as imm_20200930_models from alibabacloud_tea_util import models as util_models from alibabacloud_tea_util.client import Client as UtilClient class DeleteDatasetFileMeta: """ 删除数据集中的文件 """ def __init__(self, endpoint): self.endpoint = endpoint def create_client(self): """ 使用凭据初始化账号Client @return: Client @throws Exception """ config = open_api_models.Config( # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。, access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。, access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] ) # Endpoint 请参考 https://api.aliyun.com/product/imm config.endpoint = self.endpoint return imm20200930Client(config) def simple_query(self, project_name, dataset_name, max_result=100, next_token=None): """ SimpleQuery API查询数据集中的文件 :param project_name: :param dataset_name: :param max_result: :param next_token: :return: """ client = self.create_client() simple_query_request = imm_20200930_models.SimpleQueryRequest( project_name=project_name, dataset_name=dataset_name, next_token=next_token, max_results=max_result, with_fields=["URI"] ) runtime = util_models.RuntimeOptions() try: response = client.simple_query_with_options(simple_query_request, runtime) return response.body.to_map() except Exception as error: # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 # 错误 message print(error.message) # 诊断地址 print(error.data.get("Recommend")) UtilClient.assert_as_string(error.message) def batch_delete_file_meta(self, project_name, dataset_name, uri_list): """ BatchDeleteFileMeta 批量删除数据集文件 :param project_name: :param dataset_name: :param uri_list: :return: """ if not uri_list: return client = self.create_client() batch_delete_file_meta_request = imm_20200930_models.BatchDeleteFileMetaRequest( project_name=project_name, dataset_name=dataset_name, uris=uri_list ) runtime = util_models.RuntimeOptions() try: response = client.batch_delete_file_meta_with_options( batch_delete_file_meta_request, runtime) return response.body.to_map() except Exception as error: # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 # 错误 message print(error.message) UtilClient.assert_as_string(error.message) @staticmethod def main(endpoint, project_name, dataset_name): """删除数据集元数据""" tool = DeleteDatasetFileMeta(endpoint) next_token = None while True: # SimpleQuery循环查询数据集中的文件 simple_query_response = tool.simple_query( project_name, dataset_name, max_result=100, next_token=next_token) next_token = simple_query_response.get("NextToken") uri_list = [x.get("URI") for x in simple_query_response.get("Files", list())] # 批量删除 delete_response = tool.batch_delete_file_meta(project_name, dataset_name, uri_list) print(f"删除文件:{uri_list}, response: {delete_response}") if not next_token: break print("删除完成") if __name__ == "__main__": """ 1、需要安装IMM python SDK,参考文档:https://next.api.aliyun.com/api-tools/sdk/imm?spm=a2c4g.11186623.0.0.5e9952feu0Zm3a&version=2020-09-30&language=python-tea&tab=primer-doc 2、脚本通过AK和SK方式调用SDK,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET 3、请修改endpoint、project_name、dataset_name配置为您的配置 """ # Endpoint 请参考 https://api.aliyun.com/product/imm endpoint = 'imm.cn-hangzhou.aliyuncs.com' # IMM 项目名称 project_name = "test-project" # 数据集名称 dataset_name = "test-dataset" DeleteDatasetFileMeta.main(endpoint, project_name, dataset_name)
修改配置参数。
请根据您的实际需求,修改配置参数
endpoint
、project_name
及dataset_name
,并保存文件。# Endpoint 请参考 https://api.aliyun.com/product/imm endpoint = 'imm.cn-hangzhou.aliyuncs.com' # IMM 项目名称 project_name = "test-project" # 数据集名称 dataset_name = "test-dataset"
执行如下命令进行批量删除操作。
python delete_dataset_file_meta.py
结果演示。
脚本运行过程中会输出每批次删除的文件URI及响应结果,例如:
- 本页导读
- 前提条件
- 注意事项
- 操作步骤
- 步骤一:安装IMM Python SDK
- 步骤二:配置环境变量
- 步骤三:运行元数据批量删除脚本