全部產品
Search
文件中心

Intelligent Media Management:大量刪除資料集中的中繼資料

更新時間:Apr 23, 2025

隨著時間推移,資料集中可能積累大量到期或無用的中繼資料,例如歷史日誌、臨時檔案或已刪除原始檔案對應的中繼資料。這些冗餘資料不僅佔用儲存空間,還可能降低檢索效率。為最佳化資源管理,本文將指導您如何在資料集中大量刪除不再需要的檔案中繼資料。

前提條件

注意事項

  • 許可權管理:請確保您所使用的AccessKey具備對目標資料集的操作許可權。

  • 異常處理:指令碼中對異常進行了簡單列印,建議您在生產環境中完善異常處理邏輯。

  • 資料安全:大量刪除操作無法復原,請您在執行前確認操作範圍,避免誤刪重要資料。

操作步驟

重要

目前,Intelligent Media Management控制台暫未提供大量刪除資料集中中繼資料的功能。如需實現此操作,請參考本文進行處理。

步驟一:安裝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. 更多資訊,可參考Intelligent Media Management

步驟二:配置環境變數

完成建立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