Partage via


Utiliser des balises d’index d’objet blob pour gérer et trouver des données avec Python

Cet article explique comment utiliser des balises d’index d’objet blob pour gérer et rechercher des données en utilisant la Bibliothèque de client Stockage Azure pour Python.

Pour en savoir plus sur la définition des balises d’index de blob à l’aide d’API asynchrones, voir Définir les balises d’index de blob de manière asynchrones.

Prérequis

À propos des balises d'index blob

Les balises d’index de blob catégorisent les données de votre compte de stockage à l’aide d’attributs de balise clé-valeur. Ces balises sont automatiquement indexées et exposées en tant qu’index multidimensionnel pouvant faire l’objet d’une recherche pour trouver facilement des données. Cet article explique comment définir, obtenir et trouver des données à l’aide de balises d’index d’objets blob.

Les balises d'index blob ne sont pas prises en charge pour les comptes de stockage dont l’espace de noms hiérarchique est activé. Pour en savoir plus sur la fonctionnalité des balises d'index blob, ainsi que sur les problèmes connus et les limitations, consultez Gérer et rechercher des données blob Azure dans l’index d’objet blob.

Définir des étiquettes

Vous pouvez définir des balises d’index si votre code a autorisé l’accès aux données Blob par l’un des mécanismes suivants :

Pour plus d’informations, consultez Définition des balises d’index d’objet blob.

Vous pouvez définir des balises en utilisant la méthode suivante :

Les balises spécifiées dans cette méthode remplacent les balises existantes. Si les anciennes valeurs doivent être conservées, vous devez les télécharger et les ajouter dans l’appel de cette méthode. L’exemple suivant montre comment définir des balises :

def set_blob_tags(self, blob_service_client: BlobServiceClient, container_name):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")

    # Get any existing tags for the blob if they need to be preserved
    tags = blob_client.get_blob_tags()

    # Add or modify tags
    updated_tags = {'Sealed': 'false', 'Content': 'image', 'Date': '2022-01-01'}
    tags.update(updated_tags)

    blob_client.set_blob_tags(tags)

Vous pouvez supprimer toutes les balises en passant un objet dict vide dans la méthode set_blob_tags :

def clear_blob_tags(self, blob_service_client: BlobServiceClient, container_name):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")

    # Pass in empty dict object to clear tags
    tags = dict()
    blob_client.set_blob_tags(tags)

Obtenir des balises

Vous pouvez obtenir des balises d’index si votre code a autorisé l’accès aux données Blob par l’un des mécanismes suivants :

Pour plus d’informations, consultez Obtention et liste des balises d’index de blob.

Vous pouvez obtenir des balises en utilisant la méthode suivante :

L’exemple suivant montre comment récupérer des balises du blob et leur appliquer une itération :

def get_blob_tags(self, blob_service_client: BlobServiceClient, container_name):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")

    tags = blob_client.get_blob_tags()
    print("Blob tags: ")
    for k, v in tags.items():
        print(k, v)

Filtrer et rechercher des données avec des balises d’index de blobs

Vous pouvez utiliser des balises d’index pour rechercher et filtrer des données si votre code a autorisé l’accès aux données blob par l’un des mécanismes suivants :

Pour plus d’informations, consultez Recherche de données en utilisant les balises d’index de blob.

Notes

Vous ne pouvez pas utiliser de balises d’index pour récupérer des versions précédentes. Les balises pour les versions précédentes ne sont pas passées au moteur d’index de blob. Pour plus d’informations, consultez Conditions et problèmes connus.

Vous pouvez rechercher des données en utilisant l’une des méthodes suivantes :

L’exemple suivant recherche et répertorie tous les blobs étiquetés comme des images :

def find_blobs_by_tags(self, blob_service_client: BlobServiceClient, container_name):
    container_client = blob_service_client.get_container_client(container=container_name)

    query = "\"Content\"='image'"
    blob_list = container_client.find_blobs_by_tags(filter_expression=query)
    
    print("Blobs tagged as images")
    for blob in blob_list:
        print(blob.name)

Définir des balises d’index d’objet blob de manière asynchrone

La bibliothèque client Stockage Blob Azure pour Python prend en charge l’utilisation asynchrone des balises d’indexation des blobs. Pour en savoir plus sur les exigences de configuration de projet, consultez programmation asynchrone.

Suivez ces étapes pour définir des balises d’index de blob à l’aide d’API asynchrones :

  1. Ajoutez les instructions d’importation suivantes :

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Ajoutez du code pour exécuter le programme à l’aide de asyncio.run. Cette fonction exécute la coroutine passée, main() dans notre exemple et gère la boucle d’événement asyncio. Les coroutines sont déclarées avec la syntaxe asynchrone/await. Dans cet exemple, la main()coroutine crée d’abord le niveau supérieur BlobServiceClient à l’aide de async with, puis appelle la méthode qui définit les balises d’index blob. Notez que seul le client de niveau supérieur doit utiliser async with, car d’autres clients créés à partir de celui-ci partagent le même pool de connexions.

    async def main():
        sample = BlobSamples()
    
        # TODO: Replace <storage-account-name> with your 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:
            await sample.set_blob_tags(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Ajoutez du code pour définir les balises d’index d’objet blob. Le code est identique à l’exemple synchrone, sauf que la méthode est déclarée avec le mot clé async et que le mot clé await est utilisé lors de l’appel de get_blob_tags et des méthodes set_blob_tags.

    async def set_blob_tags(self, blob_service_client: BlobServiceClient, container_name):
        blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
    
        # Get any existing tags for the blob if they need to be preserved
        tags = await blob_client.get_blob_tags()
    
        # Add or modify tags
        updated_tags = {'Sealed': 'false', 'Content': 'image', 'Date': '2022-01-01'}
        tags.update(updated_tags)
    
        await blob_client.set_blob_tags(tags)
    

Avec cette configuration de base en place, vous pouvez implémenter d’autres exemples dans cet article en tant que coroutines à l’aide de la syntaxe asynchrone/await.

Ressources

Pour en savoir plus sur l’utilisation des balises d’index pour gérer et rechercher des données à l’aide de la bibliothèque de client Stockage Blob Azure pour Python, consultez les ressources suivantes.

Opérations de l'API REST

Le Kit de développement logiciel (SDK) Azure pour Python contient des bibliothèques qui reposent sur l’API REST Azure, ce qui vous permet d’interagir avec les opérations de l’API REST via des paradigmes Python familiers. Les méthodes de bibliothèque de client pour la gestion et l’utilisation des balises d’index blob utilisent les opérations d’API REST suivantes :

Exemples de code

Ressources de bibliothèque cliente

Voir aussi