批量删除数据集中的元数据

更新时间:2025-04-22 03:07:46

随着时间推移,数据集中可能积累大量过期或无用的元数据,例如历史日志、临时文件或已删除原始文件对应的元数据。这些冗余数据不仅占用存储空间,还可能降低检索效率。为优化资源管理,本文将指导您如何在数据集中批量删除不再需要的文件元数据。

前提条件

注意事项

  • 权限管理:请确保您所使用的AccessKey具备对目标数据集的操作权限。

  • 异常处理:脚本中对异常进行了简单打印,建议您在生产环境中完善异常处理逻辑。

  • 数据安全:批量删除操作不可逆,请您在执行前确认操作范围,避免误删重要数据。

操作步骤

重要

目前,智能媒体管理控制台暂未提供批量删除数据集中元数据的功能。如需实现此操作,请参考本文进行处理。

步骤一:安装IMM Python SDK

  1. 环境要求

    请确保您的 Python 版本为 3.7 或更高版本。您可以通过以下命令检查当前 Python 版本:

    python --version
  2. 安装方式

    使用 pip 命令安装 IMM Python SDK 的指定版本(4.6.2):

    pip install alibabacloud_imm20200930==4.6.2
  3. 更多信息,可参考智能媒体管理

步骤二:配置环境变量

完成创建AccessKey后,您需要配置环境变量 ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET

重要

阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。

步骤三:运行元数据批量删除脚本

请按照以下步骤完成代码的配置和执行,以实现对数据集中元数据的批量删除。

  1. 保存代码文件。

    请将下文代码示例保存为文件 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)
  2. 修改配置参数。

    请根据您的实际需求,修改配置参数endpointproject_namedataset_name,并保存文件。

    # Endpoint 请参考 https://api.aliyun.com/product/imm
    endpoint = 'imm.cn-hangzhou.aliyuncs.com'
    # IMM 项目名称
    project_name = "test-project"
    # 数据集名称
    dataset_name = "test-dataset"
  3. 执行如下命令进行批量删除操作。

    python delete_dataset_file_meta.py
  4. 结果演示。

    脚本运行过程中会输出每批次删除的文件URI及响应结果,例如:

    lQLPJxc3ZU1SqxPNASbNCPywT5Au1SNyGl4H521AEPpwAA_2300_294

  • 本页导读
  • 前提条件
  • 注意事项
  • 操作步骤
  • 步骤一:安装IMM Python SDK
  • 步骤二:配置环境变量
  • 步骤三:运行元数据批量删除脚本
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等