共用方式為


使用 Python 設定或變更區塊 Blob 的存取層

本文說明如何使用適用於 Python 的 Azure 儲存體用戶端程式庫來設定或變更區塊 Blob 的存取層。

若要了解有關使用非同步 API 變更 Blob 的存取層,請參閱非同步地變更 Blob 的存取層 (部分機器翻譯)。

必要條件

  • 本文假設您已有專案設定好要使用適用於 Python 的 Azure Blob 儲存體用戶端程式庫。 若要了解有關設定您的專案,包括套件安裝、新增 import 陳述式以及建立授權的用戶端物件,請參閱開始使用 Azure Blob 儲存體和 Python (部分機器翻譯)。
  • 授權機制必須具有設定 Blob 的存取層權限。 若要深入了解,請參閱下列 REST API 作業的授權指導:

關於區塊 Blob 存取層

為了管理儲存體需求的成本,根據資料的存取頻率和資料需要保留的時間長度來組織資料會很有幫助。 Azure 儲存體提供不同的存取層,讓您可以根據 Blob 資料的使用方式,以最符合成本效益的方式來儲存 Blob 資料。

blob 資料的存取層

Azure 儲存體存取層包括:

  • 經常性存取層:已針對儲存經常存取或修改的資料最佳化的線上層。 經常性存取層的儲存體成本最高,但存取成本最低。
  • 非經常性儲存層:已針對儲存不常存取或修改的資料最佳化的線上層。 非經常性存取層中的資料至少應儲存 30 天。 相較於經常性存取層,非經常性儲存層的儲存體成本較低且存取成本較高。
  • 非經常性儲存層:已針對儲存不常存取或修改的資料最佳化的線上層。 極非經常性存取層中的資料至少應儲存 90 天。 相較於非經常性存取層,極非經常性存取層的儲存體成本較低但存取成本較高。
  • 封存層:已針對儲存極少存取且具有彈性延遲需求的資料最佳化 (以小時為單位) 的離線層。 封存層中的資料至少應儲存 180 天。

若要深入了解存取層,請參閱 Blob 資料的存取層 (部分機器翻譯)。

位於封存存取層的 Blob 會被視為離線,而且無法讀取或修改。 若要讀取或修改封存 Blob 中的資料,您必須先將 Blob 解除凍結至線上層。 如需有關將 Blob 從封存層解除凍結至線上層的詳細資訊,請參閱將 Blob 自封存層解除凍結 (部分機器翻譯)。

限制

只有區塊 Blob 才能設定存取層。 若要深入了解設定區塊 Blob 存取層的限制,請參閱 設定 Blob 層 (REST API) (部分機器翻譯)。

注意

若要使用 Python 將存取層設定為 Cold,您必須使用最低的用戶端程式庫版本 12.15.0。

在 Blob 上傳期間設定存取層

您可以將 standard_blob_tier 關鍵字引數傳遞至 upload_blobupload_blob_from_url,以在 Blob 上傳時設定存取層。

下列程式碼範例顯示如何在上傳 Blob 時設定存取層:

def upload_blob_access_tier(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
    
    #Upload blob to the cool tier
    with open(file=os.path.join(r'file_path', blob_name), mode="rb") as data:
        blob_client = blob_client.upload_blob(data=data, overwrite=True, standard_blob_tier=StandardBlobTier.COOL)

若要深入了解使用 Python 上傳 Blob,請參閱使用 Python 上傳 Blob (部分機器翻譯)。

為現有的區塊 Blob 變更存取層

您可以使用下列函式來變更現有區塊 Blob 的存取層:

下列程式碼範例顯示如何將現有 Blob 的存取層變更為 Cool

def change_blob_access_tier(self, blob_client: BlobClient):
    # Change the blob access tier to cool
    blob_client.set_standard_blob_tier(StandardBlobTier.COOL)

如果您要解除凍結封存的 Blob,可以選擇性地將 rehydrate_priority 關鍵字引數傳遞至 HIGHSTANDARD

將 Blob 複製到不同的存取層

您可以將存取層指定為複製作業的一部分,以變更現有區塊 Blob 的存取層。 若要在複製作業期間變更存取層,請將 standard_blob_tier 關鍵字引數傳遞至 start_copy_from_url。 如果您要使用複製作業將 Blob 自封存層解除凍結,可以選擇性地將 rehydrate_priority 關鍵字引數傳遞至 HIGHSTANDARD

下列程式碼範例顯示如何使用複製作業,將封存的 Blob 解除凍結為 Hot 層:

def rehydrate_blob_using_copy(self, source_archive_blob: BlobClient, destination_rehydrated_blob: BlobClient):
    # Note: the destination blob must have a different name than the source blob

    # Start the copy operation - specify the rehydrate priority and blob access tier
    copy_operation = dict()
    copy_operation = destination_rehydrated_blob.start_copy_from_url(
        source_url=source_archive_blob.url,
        standard_blob_tier=StandardBlobTier.HOT,
        rehydrate_priority=RehydratePriority.STANDARD,
        requires_sync=False)

若要深入了解使用 Python 複製 Blob,請參閱使用 Python 複製 Blob (部分機器翻譯)。

非同步地變更 Blob 的存取層

適用於 Python 的 Azure Blob 儲存體用戶端程式庫支援非同步地變更 Blob 的存取層。 若要深入了解專案設定需求,請參閱非同步程式設計 (部分機器翻譯)。

請遵循下列步驟,使用非同步 API 來變更 Blob 的存取層:

  1. 新增下列匯入陳述式:

    import asyncio
    
    from azure.storage.blob import (
    StandardBlobTier
    )
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import (
    BlobServiceClient,
    BlobClient
    )
    
  2. 新增程式碼以使用 asyncio.run 執行程式。 此函式會執行傳遞的協同程式 (在我們的範例中為 main()),並管理 asyncio 事件重複。 協同程式會以 async/await 語法宣告。 在此範例中,main() 協同程式會先使用 async with 建立最上層 BlobServiceClient,然後呼叫可變更 Blob 存取層的方法。 請注意,只有最上層用戶端需要使用 async with,因為從中建立的其他用戶端會共用相同的連線集區。

    async def main():
        sample = BlobAccessTierSamples()
    
        # TODO: Replace <storage-account-name> with an actual storage account name
        account_url = "https://<storage-account-name>.blob.core.windows.net"
        credential = DefaultAzureCredential()
    
        async with BlobServiceClient(account_url, credential=credential) as blob_service_client:
            # Change the blob access tier to cool
            blob_client = blob_service_client.get_blob_client(container="sample-container", blob="sample-blob.txt")
            await sample.change_blob_access_tier(blob_client=blob_client)
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. 新增程式碼以變更 Blob 的存取層。 程式碼與同步範例相同,不同之處在於方法是以 async 關鍵字宣告,而且 await 關鍵字是在呼叫 set_standard_blob_tier 方法時才會使用。

    async def change_blob_access_tier(self, blob_client: BlobClient):
        # Change the blob access tier to cool
        await blob_client.set_standard_blob_tier(StandardBlobTier.COOL)
    

完成這個基本設定後,您可以使用 async/await 語法將本文中的其他範例實作為協同程式。

資源

若要深入了解使用適用於 Python 的 Azure Blob 儲存體用戶端程式庫來設定存取層,請參閱下列資源。

REST API 操作

適用於 Python 的 Azure SDK 包含建置在 Azure REST API 之上的程式庫,可讓您透過熟悉的 Python 範例與 REST API 作業進行互動。 用來設定存取層的用戶端程式庫方法會使用下列 REST API 作業:

用戶端程式庫資源

程式碼範例

另請參閱