Dela via


Använda blobindextaggar för att hantera och hitta data med Python

Den här artikeln visar hur du använder blobindextaggar för att hantera och hitta data med hjälp av Azure Storage-klientbiblioteket för Python.

Mer information om hur du ställer in blobindextaggar med asynkrona API:er finns i Ange blobindextaggar asynkront.

Förutsättningar

  • Den här artikeln förutsätter att du redan har ett projekt konfigurerat för att fungera med Azure Blob Storage-klientbiblioteket för Python. Mer information om hur du konfigurerar projektet, inklusive paketinstallation, tillägg import av instruktioner och skapande av ett auktoriserat klientobjekt finns i Komma igång med Azure Blob Storage och Python.
  • Auktoriseringsmekanismen måste ha behörighet att arbeta med blobindextaggar. Mer information finns i auktoriseringsvägledningen för följande REST API-åtgärder:

Om blobindextaggar

Blobindextaggar kategoriserar data i ditt lagringskonto med hjälp av taggattribut för nyckelvärde. Dessa taggar indexeras automatiskt och exponeras som ett sökbart flerdimensionellt index för att enkelt hitta data. Den här artikeln visar hur du anger, hämtar och hittar data med hjälp av blobindextaggar.

Blobindextaggar stöds inte för lagringskonton med hierarkiskt namnområde aktiverat. Mer information om funktionen blobindextagg tillsammans med kända problem och begränsningar finns i Hantera och hitta Azure Blob-data med blobindextaggar.

Ange taggar

Du kan ange indextaggar om koden har auktoriserad åtkomst till blobdata via någon av följande mekanismer:

Mer information finns i Ange blobindextaggar.

Du kan ange taggar med hjälp av följande metod:

De angivna taggarna i den här metoden ersätter befintliga taggar. Om gamla värden måste bevaras måste de laddas ned och inkluderas i anropet till den här metoden. I följande exempel visas hur du anger taggar:

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)

Du kan ta bort alla taggar genom att skicka ett tomt dict objekt till set_blob_tags metoden:

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)

Hämta taggar

Du kan hämta indextaggar om koden har auktoriserad åtkomst till blobdata via någon av följande mekanismer:

Mer information finns i Hämta och lista blobindextaggar.

Du kan hämta taggar med hjälp av följande metod:

I följande exempel visas hur du hämtar och itererar över blobens taggar:

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)

Filtrera och hitta data med blobindextaggar

Du kan använda indextaggar för att hitta och filtrera data om koden har auktoriserad åtkomst till blobdata via någon av följande mekanismer:

Mer information finns i Hitta data med hjälp av blobindextaggar.

Kommentar

Du kan inte använda indextaggar för att hämta tidigare versioner. Taggar för tidigare versioner skickas inte till blobindexmotorn. Mer information finns i Villkor och kända problem.

Du kan hitta data med hjälp av följande metod:

I följande exempel hittas och listas alla blobar taggade som en bild:

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)

Ange blobindextaggar asynkront

Azure Blob Storage-klientbiblioteket för Python har stöd för att arbeta med blobindextaggar asynkront. Mer information om krav för projektkonfiguration finns i Asynkron programmering.

Följ dessa steg för att ange blobindextaggar med asynkrona API:er:

  1. Lägg till följande importinstruktioner:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Lägg till kod för att köra programmet med .asyncio.run Den här funktionen kör den skickade coroutinen main() i vårt exempel och hanterar händelseloopen asyncio . Coroutines deklareras med syntaxen async/await. I det här exemplet main() skapar coroutinen först den översta nivån BlobServiceClient med och async withanropar sedan metoden som anger blobindextaggar. Observera att endast klienten på den översta nivån behöver använda async with, eftersom andra klienter som skapats från den delar samma anslutningspool.

    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. Lägg till kod för att ange blobindextaggar. Koden är samma som det synkrona exemplet, förutom att metoden deklareras med nyckelordet async och nyckelordet await används när du anropar get_blob_tags metoderna och 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)
    

Med den här grundläggande konfigurationen på plats kan du implementera andra exempel i den här artikeln som coroutines med hjälp av async/await-syntax.

Resurser

Mer information om hur du använder indextaggar för att hantera och hitta data med hjälp av Azure Blob Storage-klientbiblioteket för Python finns i följande resurser.

REST API-åtgärder

Azure SDK för Python innehåller bibliotek som bygger på Azure REST API så att du kan interagera med REST API-åtgärder via välbekanta Python-paradigm. Klientbiblioteksmetoderna för att hantera och använda blobindextaggar använder följande REST API-åtgärder:

Kodexempel

Klientbiblioteksresurser

Se även