Gérer et rechercher des données blob Azure dans l’index d’objet blob

Plus les jeux de données croissent, plus la recherche d’un objet spécifique dans une mer de données peut s’avérer difficile. Les balises d’index de blob fournissent des capacités de gestion et de découverte de données à l’aide d’attributs de balise d’index clé-valeur. Vous pouvez classer et rechercher des objets dans un seul conteneur ou dans tous les conteneurs de votre compte de stockage. À mesure que les exigences en matière de données changent, les objets peuvent être catégorisés dynamiquement en mettant à jour leurs balises d’index. Les objets peuvent rester à leur emplacement avec leur organisation de conteneur actuelle.

Les balises d’index de blob vous permettent d’effectuer les actions suivantes :

  • Classer dynamiquement vos blobs à l’aide de balises d’index clé-valeur

  • Rechercher rapidement des blobs spécifiques balisés dans un compte de stockage entier

  • Spécifier des comportements conditionnels pour les API d’objets blob en fonction de l’évaluation des étiquettes d’index

  • Utiliser des balises d’index pour les contrôles avancés sur les fonctionnalités telles que la gestion du cycle de vie des blobs

Imaginez un scénario dans lequel vous avez des millions de blobs dans votre compte de stockage, accessibles par de nombreuses applications différentes. Vous souhaitez rechercher toutes les données associées à un projet. Vous n’êtes pas certain de l’étendue concernée, car les données peuvent être réparties sur plusieurs conteneurs avec des conventions d’affectation de noms différentes. Toutefois, vos applications chargent toutes les données avec des balises en fonction de leur projet. Au lieu de rechercher parmi des millions de blobs et de comparer les noms et les propriétés, vous pouvez utiliser Project = Contoso comme critère de découverte. Un index de blob filtrera tous les conteneurs sur l’ensemble de votre compte de stockage pour rechercher et renvoyer rapidement un simple ensemble de 50 blobs à partir de Project = Contoso.

Pour bien démarrer, consultez des exemples d’utilisation d’un index de blob dans Utiliser des balises d’index de blob pour gérer et rechercher des données.

Étiquettes d’index d’objet blob et gestion des données

Les préfixes de nom de blob et de conteneur constituent des catégorisations unidimensionnelles. Les balises d’index de blob permettent une catégorisation multidimensionnelle pour les types de données blob (bloc, ajout ou page). La catégorisation multidimensionnelle est indexée en mode natif par Stockage Blob Azure, ce qui vous permet de trouver rapidement vos données.

Considérez les cinq objets blob suivants dans votre compte de stockage :

  • container1/transaction.csv

  • container2/campaign.docx

  • photos/bannerphoto.png

  • archives/completed/2019review.pdf

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

Ces blobs sont séparés à l’aide d’un préfixe de nom de conteneur/dossier virtuel/blob. Vous pouvez définir un attribut de balise d’index Project = Contoso sur ces cinq blobs pour les classer ensemble tout en maintenant leur organisation de préfixe actuelle. L’ajout de balises d’index évite d’avoir à déplacer les données en exposant la capacité de filtrer et de rechercher des données à l’aide de l’index.

Définition des étiquettes d’un index d’objet blob

Les étiquettes d’un index d’objet blob sont des attributs clé-valeur pouvant être appliqués à des objets nouveaux ou existants dans votre compte de stockage. Vous pouvez spécifier des balises d’index pendant le processus de chargement en utilisant les opérations Put Blob, Put Block List ou Copy Blob et l’en-tête x-ms-tags facultatif. Si vous avez déjà des blobs dans votre compte de stockage, appelez Set Blob Tags en transmettant un document XML mis en forme avec les balises d’index de blob dans le corps de la demande.

Important

La définition des balises d’index de blob peut être effectuée par le propriétaire des données Blob du stockage et par toute personne disposant d’une signature d’accès partagé qui a l’autorisation d’accéder aux balises du blob (l’autorisation SAP t).

En outre, les utilisateurs RBAC dotés de l’autorisation Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write peuvent effectuer cette opération.

Vous pouvez appliquer une étiquette individuelle à votre objet blob pour décrire le moment où vos données finissent d’être traitées.

"processedDate" = '2020-01-01'

Vous pouvez appliquer plusieurs étiquettes à votre objet blob pour mieux décrire les données.

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

Pour modifier les attributs de balise d’index existants, récupérez les attributs de balise existants, modifiez-les et remplacez-les à l’aide d’une opération Set Blob Tags. Pour supprimer toutes les balises d’index du blob, appelez l’opération Set Blob Tags sans spécifier d’attributs de balise. Comme les balises d’index de blob sont une sous-ressource du contenu des données blob, Set Blob Tags ne modifie pas le contenu sous-jacent ni la propriété Last-Modified-Time ou l’ETag du blob. Vous pouvez créer ou modifier des balises d’index pour tous les blobs de base actuels. Les balises d'index sont également conservées pour les versions précédentes, mais elles ne sont pas transmises au moteur d'indexation des blobs. Vous ne pouvez donc pas interroger les balises d'index pour retrouver les versions précédentes. Les étiquettes sur les instantanés ou les objets blobs supprimés de manière réversible ne sont pas modifiables.

Les limites suivantes s’appliquent aux étiquettes d’un index d’objet blob :

  • Chaque objet blob peut avoir jusqu’à 10 étiquettes d’index d’objet blob.

  • Les clés d’étiquette doivent comporter entre 1 et 128 caractères.

  • Les valeurs d’étiquette doivent comporter entre 0 et 256 caractères.

  • Les clés et les valeurs d’étiquette sont sensibles à la casse.

  • Les clés et les valeurs de balise prennent uniquement en charge les données de type chaîne. Les nombres, les dates, les heures ou les caractères spéciaux sont enregistrés sous forme de chaîne.

  • Si le contrôle de version est activé, les étiquettes d’index sont appliquées à une version spécifique de l’objet blob. Si vous définissez des étiquettes d’index sur la version actuelle, et qu’une nouvelle version est créée, l’étiquette ne sera pas associée à la nouvelle version. L’étiquette sera associée uniquement à la version précédente.

  • Les clés et les valeurs d’étiquette doivent respecter les règles de nommage suivantes :

    • Caractères alphanumériques :

      • a à z (lettres minuscules)

      • A à Z (lettres majuscules)

      • 0 à 9 (chiffres)

    • Caractères spéciaux valides : espace, plus, moins, point, deux-points, égal, trait de soulignement, barre oblique ( +-.:=_/)

Obtention et affichage de la liste des étiquettes d’index d’objet blob

Les balises d’index de blob sont stockées en tant que sous-ressource avec les données blob et peuvent être récupérées indépendamment du contenu sous-jacent des données blob. Les balises d’index de blob pour un seul blob peuvent être récupérées avec l’opération Get Blob Tags. L’opération List Blobs avec le paramètre include:tags renverra également tous les blobs dans un conteneur avec leurs balises d’index de blob.

Important

L’obtention et l’affichage de la liste des balises d’index de blob peuvent être effectués par le propriétaire des données Blob du stockage et par toute personne disposant d’une signature d’accès partagé qui a l’autorisation d’accéder aux balises du blob (l’autorisation SAP t).

En outre, les utilisateurs RBAC dotés de l’autorisation Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read peuvent effectuer cette opération.

Pour tous les blobs dotés d’au moins une balise d’index de blob, la valeur x-ms-tag-count est retournée dans les opérations List Blobs, Get Blob et Get Blob Properties, indiquant le nombre de balises d’index de blob sur le blob.

Recherche de données à l’aide d’étiquettes d’index d’objet blob

Le moteur d’indexation expose ces attributs clé-valeur dans un index multidimensionnel. Une fois que vous avez défini vos balises d’index, elles existent sur le blob et peuvent être récupérées immédiatement.

La mise à jour de l’index de blob peut prendre un certain temps. Cela s’applique à la fois pour l’ajout de balises et la modification de balises existantes. Le temps nécessaire dépend de la charge de travail. Par exemple, si une opération Définir des étiquettes pour les objets blob prend 30 minutes à un rythme de 15 000 à 20 000 transactions par seconde, l’indexation de tous ces objets blob peut prendre jusqu’à 10 minutes. À un taux inférieur, le délai d’indexation peut de moins d’une seconde. La distribution du trafic affecte aussi les retards d’indexation. Par exemple, si une application cliente définit des étiquettes sur des objets blob en respectant l’ordre séquentiel dans le même conteneur, le délai peut être supérieur à ce qu’il serait si des étiquettes étaient appliquées à des objets blob à divers emplacements.

Une fois l’index de blob mis à jour, vous pouvez utiliser des capacités natives de requête et de découverte offertes par Stockage Blob.

L’opération Find Blobs By Tags vous permet d’obtenir un ensemble filtré de blobs retournés dont les balises d’index correspondent à une expression de requête donnée. Find Blobs by Tags prend en charge le filtrage sur tous les conteneurs de votre compte de stockage, ou vous pouvez limiter le filtrage à un seul conteneur. Comme toutes les clés et valeurs des balises d’index sont des chaînes, les opérateurs de relation utilisent un tri lexicographique.

Important

La recherche de données en utilisant des balises d’index de blob peut être effectuée par le propriétaire des données blob du stockage et par toute personne disposant d’une signature d’accès partagé qui a l’autorisation de rechercher des blobs par balise (l’autorisation SAP f).

En outre, les utilisateurs RBAC dotés de l’autorisation Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action peuvent effectuer cette opération.

Les critères suivants s’appliquent au filtrage de l’index d’objet blob :

  • Les clés des étiquettes doivent être placées entre guillemets doubles (").

  • Les valeurs des étiquettes et les noms des conteneurs doivent être placés entre guillemets simples (').

  • Le caractère @ est autorisé uniquement pour le filtrage sur un nom de conteneur spécifique (p. ex., @container = 'ContainerName').

  • Les filtres sont appliqués avec un tri lexicographique sur les chaînes.

  • Des opérations de comparaison dans un même sens sur la même clé ne sont pas valides (p. ex., "Rank" > '10' AND "Rank" >= '15').

  • Lorsque vous utilisez REST pour créer une expression de filtre, les caractères doivent être encodés sous forme d’URI.

  • Les requêtes d’étiquette sont optimisées pour la correspondance d’égalité avec une seule étiquette (par exemple, StoreID = "100"). Les requêtes de plage utilisant une seule étiquette impliquant >, >=, <, <= sont également efficaces. Toute requête utilisant AND avec plusieurs étiquettes ne sera pas aussi efficace. Par exemple, Coût > "01" AND Coût <= "100" est efficace. Coût > "01 AND StoreID = "2" n’est pas aussi efficace.

Le tableau ci-dessous montre tous les opérateurs valides pour Find Blobs by Tags :

Opérateur Description Exemple
= Égal à "Status" = 'In Progress'
> Supérieur à "Date" > '2018-06-18'
>= Supérieur ou égal à "Priority" >= '5'
< Inférieur à "Age" < '32'
<= Inférieur ou égal à "Priority" <= '5'
AND ET logique "Rank" >= '010' AND "Rank" < '100'
@container Limiter l’étendue à un conteneur spécifique @container = 'videofiles' AND "status" = 'done'

Notes

Familiarisez-vous avec l'ordre lexicographique lors de la définition et de l'interrogation des étiquettes.

  • Les nombres sont triés avant les lettres. Les nombres sont triés sur la base du premier chiffre.
  • Les lettres majuscules sont triées avant les lettres minuscules.
  • Les symboles ne sont pas standard. Certains symboles sont triés avant les valeurs numériques. Les autres symboles sont triés avant ou après les lettres.

Opérations d’objet blob conditionnelles avec étiquettes d’index d’objet blob

Dans les versions REST 2019-10-10 et ultérieures, la plupart des API de service blob prennent désormais en charge un en-tête conditionnel, x-ms-if-tags, de sorte que l’opération réussira uniquement si la condition d’index de blob spécifiée est remplie. Si la condition n’est pas remplie, vous obtiendrez error 412: The condition specified using HTTP conditional header(s) is not met.

L’en-tête x-ms-if-tags peut être combiné avec les autres en-têtes conditionnels HTTP existants (If-Match, If-None-Match, etc.). Si plusieurs en-têtes conditionnels sont fournis dans une demande, ils doivent tous équivaloir à true pour que l’opération réussisse. Tous les en-têtes conditionnels sont combinés de manière efficace avec un ET logique.

Le tableau ci-dessous montre les opérateurs valides pour les opérations conditionnelles :

Opérateur Description Exemple
= Égal à "Status" = 'In Progress'
<> Différent de "Status" <> 'Done'
> Supérieur à "Date" > '2018-06-18'
>= Supérieur ou égal à "Priority" >= '5'
< Inférieur à "Age" < '32'
<= Inférieur ou égal à "Priority" <= '5'
AND ET logique "Rank" >= '010' AND "Rank" < '100'
OR OU logique "Status" = 'Done' OR "Priority" >= '05'

Notes

Il existe deux opérateurs supplémentaires, « Différent de » et « OU logique », qui sont autorisés dans l’en-tête x-ms-if-tags conditionnel pour les opération de blob, mais qui n’existent pas dans l’opération Find Blobs by Tags.

Intégrations de plateforme avec des étiquettes d’index d’objet blob

Les balises d’index de blob vous permettent non seulement de classer, de gérer et de rechercher vos données blob, mais également d’intégrer d’autres fonctionnalités de Stockage Blob, telles que la gestion du cycle de vie.

Gestion du cycle de vie

L’utilisation de blobIndexMatch en tant que filtre de règle dans la gestion du cycle de vie vous permet de déplacer les données vers des niveaux plus froids ou de supprimer des données en fonction des balises d’index appliquées à vos blobs. Vous pouvez être plus précis dans vos règles et déplacer ou supprimer uniquement les blobs qui correspondent aux critères d’étiquette spécifiés.

Vous pouvez définir une correspondance d’index d’objet blob comme filtre autonome défini dans une règle de cycle de vie pour appliquer des actions aux données avec étiquettes. Vous pouvez également combiner un préfixe et un index de blob pour établir une correspondance avec des jeux de données plus spécifiques. La spécification de plusieurs filtres dans une règle de cycle de vie applique une opération « ET logique ». L’action s’appliquera uniquement si tous les critères de filtrage correspondent.

L’exemple de règle de gestion de cycle de vie suivant s’applique aux objets blob de blocs dans un conteneur appelé videofiles. La règle hiérarchise les blobs pour archiver le stockage uniquement si les données correspondent aux critères de balise d’index de blob "Status" == 'Processed' AND "Source" == 'RAW'.

Blob index match rule example for Lifecycle management in Azure portal

Autorisation et permissions

Vous pouvez autoriser l’accès aux balises d’index de blob à l’aide de l’une des approches suivantes :

Les balises d’index de blob sont une sous-ressource des données blob. Un utilisateur disposant d’autorisations ou d’un jeton SAS pour lire ou écrire des objets blob peut ne pas avoir accès aux étiquettes d’index d’objet blob.

Contrôle d’accès en fonction du rôle

Les appelants utilisant une identité Microsoft Entra peuvent se voir accorder les autorisations suivantes pour effectuer des opérations sur des balises d’index de blobs.

Opérations sur les balises d’index de blob Action Azure RBAC
Définir des étiquettes d’objet blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write
Obtenir les étiquettes d’objet blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read
Rechercher des objets blob par étiquettes Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action

Des autorisations supplémentaires, distinctes des données blob sous-jacentes, sont requises pour effectuer des opérations sur les balises d’index. Le rôle Propriétaire des données Blob du stockage dispose des autorisations pour les trois opérations de balises d’index de blob.

Autorisations SAS

Les appelants utilisant une signature d’accès partagé (SAP) peuvent se voir accorder des autorisations délimitées pour effectuer des opérations sur les balises d’index de blob.

Créer une SAP pour un objet blob

Les autorisations suivantes peuvent être accordées dans une signature d’accès partagé de service pour un objet blob afin de permettre l’accès aux étiquettes d’index d’objet blob. Les autorisations de lecture (r) et d’écriture (w) de blob seules ne sont pas suffisantes pour permettre la lecture ou l’écriture de ses balises d’index.

Autorisation Symbole d’URI Opérations autorisées
Étiquettes d’index t Obtenir et définir des balises d’index pour un blob

SAP de service pour un conteneur

Les autorisations suivantes peuvent être accordées dans une signature d’accès partagé de service pour un conteneur afin de permettre le filtrage sur les étiquettes d’objet blob. L’autorisation de liste d’objets blob (i) n’est pas suffisante pour permettre le filtrage des objets blob par leurs étiquettes d’index.

Autorisation Symbole d’URI Opérations autorisées
Étiquettes d’index f Rechercher des blobs avec des balises d’index

SAP de compte

Les autorisations suivantes peuvent être accordées dans une signature d’accès partagé de compte pour autoriser l’accès aux étiquettes d’index d’objet blob et au filtrage sur les étiquettes blob.

Autorisation Symbole d’URI Opérations autorisées
Étiquettes d’index t Obtenir et définir des balises d’index pour un blob
Étiquettes d’index f Rechercher des blobs avec des balises d’index

Les autorisations de lecture (r) et d’écriture (w) de blob seules ne sont pas suffisantes pour autoriser la lecture ou l’écriture de ses étiquettes d’index, et l’autorisation de liste (i) ne suffit pas pour permettre le filtrage des objets blob par leurs étiquettes d’index.

Choisir entre les métadonnées et les étiquettes d’index d’objet blob

Les métadonnées et les balises d’index de blob permettent de stocker des propriétés clé-valeur arbitraires définies par l’utilisateur en même temps qu’une ressource de blob. Les deux peuvent être récupérés et définis directement, sans retourner ni modifier le contenu du blob. Il est possible d’utiliser à la fois des balises d’index et des métadonnées.

Seules les balises d’index sont indexées automatiquement et peuvent être interrogées par le service Stockage Blob natif. Les métadonnées ne peuvent pas être indexées ou recherchées en mode natif. Vous devez utiliser un service distinct, par exemple Recherche Azure. Les balises d’index de blob disposent d’autorisations supplémentaires pour la lecture, le filtrage et l’écriture qui sont distinctes des données blob sous-jacentes. Les métadonnées utilisent les mêmes autorisations que le blob et sont retournées sous forme d’en-têtes HTTP dans les opérations Get Blob et Get Blob Properties. Les balises d’index de blob sont chiffrées au repos à l’aide d’une clé gérée par Microsoft. Les métadonnées sont chiffrées au repos à l’aide de la même clé de chiffrement spécifiée pour les données blob.

Le tableau suivant récapitule les différences entre les métadonnées et les étiquettes d’index d’objet blob :

Métadonnées Étiquettes d’index d’objet blob
Limites Aucune limite numérique ; 8 ko au total ; ne respectent pas la casse Dix balises par blob max. ; 768 octets par balise ; respectent la casse
Mises à jour Non autorisées sur le niveau Archive ; Set Blob Metadata remplace toutes les métadonnées existantes ; Set Blob Metadata modifie la propriété Last-Modified-Time du blob Autorisées pour tous les niveaux d’accès ; Set Blob Tags remplace toutes les balises existantes ; Set Blob Tags ne modifie pas la propriété Last-Modified-Time du blob
Stockage Stockées avec les données blob Sous-ressource des données blob
Indexation et interrogation Doit utiliser un service distinct comme Recherche Azure Capacités d’indexation et d’interrogation intégrées à Stockage Blob
Chiffrement Chiffrées au repos avec la même clé de chiffrement que celle utilisée pour les données blob Chiffrées au repos avec une clé de chiffrement gérée par Microsoft
Tarification La taille des métadonnées est incluse dans les coûts de stockage d’un objet blob Coût fixe par étiquette d’index
Réponse d’en-tête Métadonnées retournées en tant qu’en-têtes dans Get Blob et Get Blob Properties Nombre de balises retourné par Get Blob ou Get Blob Properties ; balises retournées uniquement par Get Blob Tags et List Blobs
autorisations Les autorisations de lecture ou d’écriture sur les données blob s’étendent aux métadonnées Des autorisations supplémentaires sont requises pour lire, filtrer ou écrire des balises d’index
Dénomination Les noms de métadonnées doivent respecter les règles d'affectation de noms des identificateurs C# Les étiquettes d’index d’objet blob prennent en charge un plus grand nombre de caractères alphanumériques

Tarifs

Vous êtes facturé pour le nombre moyen mensuel de balises d’index dans un compte de stockage. Aucun coût ne s’applique au moteur d’indexation. Les requêtes pour Définir des étiquettes de blob, Obtenir des étiquettes de blob et Rechercher des étiquettes de blob sont facturées aux tarifs de transaction respectifs en vigueur. Notez que le nombre de transactions de liste consommées lors de la réalisation d’une transaction Rechercher des blobs par étiquette est égal au nombre de clauses dans la demande. Par exemple, la requête (StoreID = 100) est une transaction de liste. La requête (StoreID = 100 AND SKU = 10010) est deux transactions de liste. Consultez Tarification d’objet blob de blocs pour en savoir plus.

Prise en charge des fonctionnalités

La prise en charge de cette fonctionnalité peut être impactée par l’activation de Data Lake Storage Gen2, du protocole NFS (Network File System) 3.0 ou du protocole SFTP (SSH File Transfer Protocol). Si vous avez activé l’une de ces fonctionnalités, consultez Prise en charge des fonctionnalités Stockage Blob dans les comptes Stockage Azure pour évaluer la prise en charge de cette fonctionnalité.

Conditions et problèmes connus

Cette section décrit les problèmes connus et les conditions dans lesquelles ils se produisent.

  • Seuls les comptes à usage général v2 et les comptes d’objets blob de blocs Premium sont pris en charge. Les objets blob de pages Premium, les objets blob hérités et les comptes avec un espace de noms hiérarchique activé ne sont pas pris en charge. Les comptes v1 universels ne sont pas pris en charge.

  • Le chargement d’objets blob de pages avec des balises d’index ne conserve pas les balises. Définissez les balises après le chargement d’un objet blob de pages.

  • Si le contrôle de version est activé, vous pouvez continuer à utiliser des balises d’index dans la version actuelle. Les balises d’index sont conservées pour les versions précédentes, mais ces balises ne sont pas transmises au moteur d’indexation des blobs, de sorte que vous ne pouvez pas les utiliser pour retrouver les versions précédentes. Si vous promouvez une version antérieure à la version actuelle, les balises de cette version antérieure deviennent les balises de la version actuelle. Comme ces balises sont associées à la version actuelle, elles sont transmises au moteur d'indexation des blobs et vous pouvez les interroger.

  • Il n’existe aucune API permettant de déterminer si les balises d’index sont indexées.

  • La gestion du cycle de vie prend en charge uniquement les contrôles d’égalité avec correspondance d’index de blob.

  • Copy Blob ne copie pas les balises d’index de blob du blob source dans le nouveau blob de destination. Vous pouvez spécifier les étiquettes que vous souhaitez appliquer à l’objet blob de destination pendant l’opération de copie.

Forum aux questions (FAQ)

Consultez FAQ sur les étiquettes d’index d’objet blob.

Étapes suivantes

Pour obtenir un exemple d’utilisation d’un index de blob, consultez Utiliser un index de blob pour gérer et rechercher des données.

En savoir plus sur la gestion de cycle de vie et définir une règle avec correspondance d’index de blob.