使用 Blob 索引標籤來管理及尋找 Azure Blob 資料

當資料集越來越龐大時,在資料中尋找特定物件可能會越發困難。 Blob 索引標籤會使用索引鍵/值索引標籤屬性,提供資料管理和探索功能。 您可以在單一容器內或是儲存體帳戶中的所有容器內,分類和尋找物件。 當資料需求變更時,還可以藉由更新索引標籤來動態分類物件。 物件可以保留在目前的容器組織位置中。

Blob 索引標籤可讓您:

  • 使用索引鍵/值索引標籤動態分類 Blob

  • 在整個儲存體帳戶快速尋找特定標記的 Blob

  • 根據索引標籤的評估來指定 Blob API 的條件式行為

  • Blob 生命週期管理等功能上使用索引標籤來進行進階控制

假如您的儲存體帳戶中有數百萬個 Blob,且由許多不同的應用程式存取。 而您想要尋找單一專案中的所有相關資料。 您不確定資料的分佈範圍包括幾個具有不同命名慣例的容器。 不過,您的應用程式會以資料專案為基礎的標籤上傳所有資料。 您可以使用 Project = Contoso 做為探索準則,而不是搜尋數百萬個 Blob 和比較名稱和屬性。 Blob 索引會篩選整個儲存體帳戶中的所有容器,以快速尋找並從 Project = Contoso 傳回一組 50 個 Blob。

如需開始使用 Blob 索引的範例,請參閱使用 Blob 索引標籤來管理和尋找資料

Blob 索引標籤和資料管理

容器和 Blob 名稱前置詞是一維的分類。 Blob 索引標籤允許 Blob 資料類型 (區塊、附加或分頁) 的多維度分類。 多維度分類是由 Azure Blob 儲存體原生編制的索引,讓您可快速找到資料。

請考慮您儲存體帳戶中的下列五個 Blob:

  • container1/transaction.csv

  • container2/campaign.docx

  • photos/bannerphoto.png

  • archives/completed/2019review.pdf

  • logs/2020/01/01/logfile.txt

這些 Blob 會使用「容器/虛擬資料夾/Blob 名稱」的前置詞來區隔。 您可以設定這五個 Blob 的索引標記屬性 Project = Contoso,將其分類在一起,同時維持其目前的前置詞結構。 加入索引標籤可讓您藉由使用索引來篩選和尋找資料,免去移動資料的需要。

設定 Blob 索引標籤

Blob 索引標籤是索引鍵/值屬性,可套用至儲存體帳戶內的現有或新物件。 您可以使用 Put BlobPut Block ListCopy Blob 作業和選用的 x-ms-tags 標頭,在上傳過程中指定索引標籤。 如果您的儲存體帳戶中已經有 Blob,請呼叫 Set Blob Tags,在要求本文中傳遞具有索引標籤的格式化 XML 檔案。

重要

儲存體 Blob 資料擁有者,以及具有共用存取簽章且擁有存取 Blob 標籤權限 (t SAS 權限) 的任何人都可以設定 Blob 索引標籤。

此外,具有 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write 權限的 RBAC 使用者也可以執行這項作業。

您可以在 Blob 上套用單一標記,以描述資料處理完成的時間。

"processedDate" = '2020-01-01'

您可以在 Blob 上套用多個標籤,以提供更多資料描述。

"Project" = 'Contoso' "Classified" = 'True' "Status" = 'Unprocessed' "Priority" = '01'

若要修改現有的索引標籤屬性,請擷取現有的標籤屬性、修改標籤屬性,然後使用 Set Blob Tags 作業進行取代。 若要從 Blob 中移除所有索引標籤,請呼叫未指定任何標籤屬性的 Set Blob Tags 作業。 Blob 索引標籤是 Blob 資料內容的子資源,Set Blob Tags 不會修改任何基礎內容,也不會變更 Blob 的上次修改時間或 eTag。 您可以建立或修改所有目前基底 Blob 的索引標籤。 索引標籤也會保留給先前的版本,但不會傳遞給 Blob 索引引擎,因此您無法透過查詢索引標籤來擷取先前的版本。 無法修改快照集或虛刪除 Blob 上的標籤。

下列限制適用於 Blob 索引標籤:

  • 每個 Blob 最多可以有 10 個 Blob 索引標籤

  • 標籤索引鍵必須介於 1 到 128 個字元之間。

  • 標籤值必須介於 0 到 256 個字元之間。

  • 標籤索引鍵與值分大小寫。

  • 標籤索引鍵和值只支援字串資料類型。 任何數字、日期、時間或特殊字元都會儲存為字串。

  • 如果啟用版本設定,則索引標籤會套用至特定版本的 Blob。 如果您在目前版本上設定索引標籤,且已建立新版本,則標籤將不會與新版本相關聯。 標籤只會與舊版相關聯。

  • 標籤索引鍵和值必須遵守下列命名規則:

    • 英數字元:

      • az (小寫字母)

      • AZ (大寫字母)

      • 09 (數字)

    • 有效的特殊字元:空格、加號、減號、句號、冒號、等號、底線、正斜線 ( +-.:=_/)

擷取和列出 Blob 索引標籤

Blob 索引標記會連同 Blob 資料一起儲存為子資源,而且可以從基礎 Blob 資料內容中單獨擷取。 您可以使用 Get Blob Tags 作業來擷取單一 Blob 的 Blob 索引標籤。 具有 include:tags 參數的 List Blobs 作業也會傳回容器內的所有 Blob 及其 Blob 索引標籤。

重要

儲存體 Blob 資料擁有者,以及具有共用存取簽章且擁有存取 Blob 標籤權限 (t SAS 權限) 的任何人都可以取得和列出 Blob 索引標籤。

此外,具有 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read 權限的 RBAC 使用者也可以執行這項作業。

對於至少有一個 Blob 索引標記的任何 Blob,x-ms-tag-count 會傳回 List BlobsGet BlobGet Blob Properties 作業,指出 Blob 上的索引標籤計數。

使用 Blob 索引標籤尋找資料

索引引擎會將您的索引鍵/值屬性公開至多維度索引。 設定索引標籤之後,這些標籤會存在於 Blob 上,並且可立即擷取。

Blob 索引可能需要一些時間才會更新。 新增標籤和編輯現有標籤都是如此。 所需的時間取決於工作負載。 例如,如果 「設定 Blob 標籤 」作業需要 30 分鐘的時間才能完成 (速率為每秒 15000 到 20000 筆交易),則編製索引所有這些 Blob 可能需要 10 分鐘才能完成。 在較低的速率下,索引延遲可能會低於一秒內。 流量分佈也會影響編製索引延遲。 例如,如果用戶端應用程式以相同容器的循序順序在 Blob 上設定標籤,則延遲可能會高於將標籤套用至不位於同處 Blob 時的延遲。

在 Blob 索引更新之後,您可以使用 Blob 儲存體所提供的原生查詢和探索功能。

Find Blobs by Tags 作業可讓您取得一組已篩選的 Blob,其索引標籤符合指定的查詢運算式。 Find Blobs by Tags 支援篩選儲存體帳戶內的所有容器,或者也可以將篩選範圍限定為單一容器。 由於所有索引標籤索引鍵和值都是字串,因此關聯式運算子會使用字典編纂排序。

重要

儲存體 Blob 資料擁有者,以及具有共用存取簽章且擁有依標籤尋找 Blob 權限 (f SAS 權限) 的任何人都可以使用 Blob 索引標籤尋找資料。

此外,具有 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action 權限的 RBAC 使用者也可以執行這項作業。

下列準則適用於 Blob 索引篩選:

  • 標籤索引鍵應該用雙引號 (") 括住

  • 標籤值和容器名稱應以單引號 (') 括住

  • @ 字元只可用於篩選特定的容器名稱 (例如,@container = 'ContainerName')

  • 篩選準則會套用到字串上的字典編纂排序

  • 相同索引鍵上相同的側邊範圍作業無效 (例如,"Rank" > '10' AND "Rank" >= '15')

  • 使用 REST 建立篩選運算式時,字元應以 URI 編碼

  • 標籤查詢已針對使用單一標籤 (例如 StoreID = "100") 的相等比對進行最佳化。 使用包含 >、>=、<、<= 的單一標籤範圍查詢也很有效率。 任何使用 AND 和多個標籤的查詢效率都較差。 例如,Cost > "01" AND Cost <= "100" 較有效率。 Cost > "01 AND StoreID = "2" 則效率較低。

下表顯示 Find Blobs by Tags 的所有有效運算子:

運算子 名稱 範例
= 等於 "Status" = 'In Progress'
> 大於 "Date" > '2018-06-18'
>= 大於或等於 "Priority" >= '5'
< 小於 "Age" < '32'
<= 小於或等於 "Priority" <= '5'
邏輯和 "Rank" >= '010' AND "Rank" < '100'
@container 將範圍設為特定容器 @container = 'videofiles' AND "status" = 'done'

注意

在標籤上設定和查詢時,請熟悉字典順序。

  • 數字排在字母之前。 數字會根據第一位數字來排序。
  • 大寫字母會在小寫字母之前排序。
  • 符號沒有標準。 某些符號會排在數值之前。 另一些符號會排在字母之前或之後。

具有 Blob 索引標記的條件式 Blob 作業

在 REST 版本 2019-10-10 和更新版本中,大部分的 Blob 服務 API 現在都支援條件式標頭 (x-ms-if-tags) 如此一來,只有在符合指定的 Blob 索引條件時,作業才會成功。 如果不符合條件,您將會得到 error 412: The condition specified using HTTP conditional header(s) is not met

x-ms-if-tags 標頭可能會與其他現有的 HTTP 條件式標頭結合 (If-Match、If-None-Match 等等)。 如果要求中提供多個條件式標頭,則這些標頭必須評估為 true,作業才會成功。 所有條件式標頭都會用邏輯 AND 合併以提升效率。

下表顯示條件式作業的有效運算子:

運算子 名稱 範例
= 等於 "Status" = 'In Progress'
<> 不等於 "Status" <> 'Done'
> 大於 "Date" > '2018-06-18'
>= 大於或等於 "Priority" >= '5'
< 小於 "Age" < '32'
<= 小於或等於 "Priority" <= '5'
邏輯和 "Rank" >= '010' AND "Rank" < '100'
OR 邏輯或 "Status" = 'Done' OR "Priority" >= '05'

注意

Blob 作業的條件式 x-ms-if-tags 標頭中允許有兩個額外的運算子,不等於和邏輯 OR,但不存在於 Find Blobs by Tags 作業中。

使用 Blob 索引標記的平台整合

Blob 索引標籤不僅可協助您分類、管理及搜尋 Blob 資料,還可整合其他 Blob 儲存體功能,例如生命週期管理

生命週期管理

您可以使用 blobIndexMatch 做為生命週期管理中的規則篩選器,將資料移至較低層級,或根據 Blob 套用的索引標記來刪除資料。 如果 Blob 符合指定的標籤準則,您可以更精細地在規則中移動或刪除這些 Blob。

您可以將 Blob 索引比對設為生命週期規則中的獨立篩選集,以對已標記的資料套用動作。 或者,您可以結合前置詞和 Blob 索引,以比對更具體的資料集。 在生命週期規則中指定多個篩選準則會套用邏輯 AND 運算。 只有當符合所有篩選準則時,才會套用動作。

下列範例生命週期管理規則適用於名為 videofiles 的容器內區塊 Blob。 只有當資料符合 "Status" == 'Processed' AND "Source" == 'RAW' 的 Blob 索引標記準則時,才會將規則層 Blob 保存到封存儲存體。

Blob index match rule example for Lifecycle management in Azure portal

權限和授權

您可以使用下列其中一種方法來授與 Blob 索引標籤的存取權:

Blob 索引標記是 Blob 資料的子資源。 具有權限或 SAS 權杖可讀取或寫入 Blob 的使用者,可能無法存取 Blob 索引標籤。

角色型存取控制

使用 Microsoft Entra 身分識別的呼叫者可能會獲得下列權限,以便使用 Blob 索引標籤。

Blob 索引標記作業 Azure RBAC 動作
設定 Blob 標籤 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write
取得 Blob 標籤 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read
依標籤尋找 Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action

不同於基礎 Blob 資料,索引標記作業還需要額外的授權。 儲存體 Blob 資料擁有者角色會授與所有的三個 Blob 索引標記作業權限。

SAS 權限

使用共用存取簽章 (SAS) 的呼叫者可能會被授與一定範圍權限,以便使用 Blob 索引標籤。

Blob 的服務 SAS

您可以在 Blob 的服務 SAS 中授與下列權限,以允許存取 Blob 索引標籤。 單獨的 Blob 讀取 (r) 和寫入 (w) 權限不足以允許讀取或寫入其索引標籤。

權限 URI 符號 允許的作業
索引標籤 t 取得和設定 Blob 的索引標籤

容器的服務 SAS

您可以在容器的服務 SAS 中授與下列權限,以允許對 Blob 標籤進行篩選。 Blob 清單 (i) 權限不足以允許根據索引標籤來篩選 Blob。

權限 URI 符號 允許的作業
索引標籤 f 尋找具有索引標籤的 Blob

帳戶 SAS

您可以在帳戶 SAS 中授與下列權限,以允許存取 Blob 索引標籤和對 Blob 標籤進行篩選。

權限 URI 符號 允許的作業
索引標籤 t 取得和設定 Blob 的索引標籤
索引標籤 f 尋找具有索引標籤的 Blob

單獨的 Blob 讀取 (r) 和寫入 (w) 權限不足以允許讀取或寫入其索引標籤,而清單 (i) 權限不足以允許根據索引標籤來篩選 Blob。

在中繼資料和 Blob 索引標籤之間進行選擇

Blob 索引標籤和中繼資料都支援將任意使用者定義的索引鍵/值屬性與 Blob 資源一起儲存。 兩者都可以直接擷取和設定,不需要傳回或改變 Blob 的內容。 您可以同時使用中繼資料和索引標籤。

只有索引標籤會自動編制索引,並可由原生 Blob 儲存體服務進行搜尋。 中繼資料本身無法編制索引或進行搜尋。 您必須使用其他的服務,例如 Azure 搜尋。 不同於基礎 Blob 資料,Blob 索引標籤具有讀取、篩選和寫入的額外權限。 中繼資料會使用與 Blob 相同的權限,並由 Get BlobGet Blob Properties 作業以 HTTP 標頭傳回。 Blob 索引標籤會使用由 Microsoft 管理的金鑰進行待用加密。 中繼資料會使用針對 Blob 資料指定的相同加密金鑰進行待用加密。

下表摘要說明中繼資料與 Blob 索引標籤之間的差異:

中繼資料 Blob 索引標籤
限制 沒有數值限制、8 KB 總計、不區分大小寫 每個 Blob 最多 10 個標籤,每個標籤 768 個位元組,區分大小寫
更新 封存層不允許,Set Blob Metadata 會取代所有現有的中繼資料,Set Blob Metadata 會變更 Blob 的上次修改時間 允許所有存取層,Set Blob Tags 會取代所有現有的標記,而 Set Blob Tags 不會變更 Blob 的上次修改時間
Storage 儲存包含 Blob 資料 Blob 資料的子資源
編製索引與查詢 必須使用其他的服務,例如 Azure 搜尋 Blob 儲存體內建的編製索引和查詢功能
加密 透過 Blob 資料所使用的相同加密金鑰進行待用加密 使用由 Microsoft 管理的加密金鑰進行待用加密
定價 Blob 的儲存成本包含中繼資料的大小 每個索引標籤的固定成本
標頭回應 Get BlobGet Blob Properties 中以標頭傳回的中繼資料 Get BlobGet Blob Properties 所傳回的標籤計數,標籤只能由 Get Blob TagsList Blobs 傳回
權限 Blob 資料的讀取或寫入權限延伸至中繼資料 需要其他權限才能讀取、篩選或寫入索引標籤
命名 中繼資料名稱必須遵守 C# 識別碼的命名規則 Blob 索引標籤支援更廣泛的英數字元

定價

您需支付儲存體帳戶內每月平均索引標籤數目的費用。 編製索引引擎不會產生任何費用。 設定 Blob 標籤、取得 Blob 標籤和尋找 Blob 標籤的要求都會依目前個別的交易費率計費。 請注意,依標籤尋找 Blob 交易所耗用的清單交易數目,等於要求中的子句數目。 例如,查詢 (StoreID = 100) 是一個清單交易。 查詢 (StoreID = 100 和 SKU = 10010) 是兩個清單交易。 若要深入了解,請參閱區塊 Blob 定價

功能支援

啟用 Data Lake Storage Gen2、網路檔案系統 (NFS) 3.0 通訊協定,或 SSH 檔案傳輸通訊協定 (SFTP),可能會影響到此功能的支援。 如果您已啟用上述任何功能,請參閱 Azure 儲存體帳戶中的 Blob 儲存體功能支援,以評估此功能的支援。

條件與已知問題

本節說明已知問題和條件。

  • 僅支援一般用途 v2 帳戶與進階區塊 Blob 帳戶。 不支援進階版分頁 Blob、舊版 Blob 和已啟用階層命名空間的帳戶。 不支援一般用途 v1 帳戶。

  • 使用索引標籤上傳分頁 Blob 不會保存標籤。 在上傳分頁 Blob 之後設定標籤。

  • 如果啟用 Blob 儲存體版本設定,您仍然可以在目前的版本上使用索引標籤。 先前的版本也會保留索引標籤,但不會傳遞給 Blob 索引引擎,因此您無法透過擷取先前的版本來使用索引標籤。 如果您將舊版升級為目前的版本,則先前版本的標籤會成為目前版本的標籤。 因為這些標籤與目前的版本相關聯,所以會將傳遞給 Blob 索引引擎,而且您可以進行查詢。

  • 沒有 API 可判斷索引標籤是否已編制索引。

  • 生命週期管理僅支援具有 Blob 索引相符的相等檢查。

  • Copy Blob 不會將 Blob 索引標籤從來源 Blob 複製到新的目的地 Blob。 您可以在複製作業期間,指定要套用至目的地 Blob 的標籤。

常見問題集 (FAQ)

請參閱 Blob 索引標籤常見問題 (部分機器翻譯)。

下一步

如需如何使用 Blob 索引的範例,請參閱使用 Blob 索引來管理和尋找資料

深入了解生命週期管理,並設定 Blob 索引比對的規則。