隨著時間推移,資料集中可能積累大量到期或無用的中繼資料,例如歷史日誌、臨時檔案或已刪除原始檔案對應的中繼資料。這些冗餘資料不僅佔用儲存空間,還可能降低檢索效率。為最佳化資源管理,本文將指導您如何在資料集中大量刪除不再需要的檔案中繼資料。
前提條件
已開通OSS服務、建立儲存空間並上傳檔案到儲存空間。具體操作,請參見控制台上傳檔案。
已通過Intelligent Media Management控制台建立專案。
說明您也可以調用API介面CreateProject - 建立專案。
您可以調用ListProjects - 列出所有專案資訊的列表介面列出指定地區下已建立的所有專案資訊。
已根據使用情境為檔案建立中繼資料索引。
注意事項
許可權管理:請確保您所使用的AccessKey具備對目標資料集的操作許可權。
異常處理:指令碼中對異常進行了簡單列印,建議您在生產環境中完善異常處理邏輯。
資料安全:大量刪除操作無法復原,請您在執行前確認操作範圍,避免誤刪重要資料。
操作步驟
目前,Intelligent Media Management控制台暫未提供大量刪除資料集中中繼資料的功能。如需實現此操作,請參考本文進行處理。
步驟一:安裝IMM Python SDK
環境要求
請確保您的 Python 版本為 3.7 或更高版本。您可以通過以下命令檢查當前 Python 版本:
python --version安裝方式
使用
pip命令安裝 IMM Python SDK 的指定版本(4.6.2):pip install alibabacloud_imm20200930==4.6.2更多資訊,可參考Intelligent Media Management。
步驟二:配置環境變數
完成建立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及響應結果,例如:
