Sdílet prostřednictvím


Použití značek indexu objektů blob ke správě a hledání dat pomocí Pythonu

Tento článek ukazuje, jak pomocí značek indexu objektů blob spravovat a vyhledávat data pomocí klientské knihovny azure Storage pro Python.

Informace o nastavení značek indexu objektů blob pomocí asynchronních rozhraní API najdete v tématu Nastavení značek indexu objektů blob asynchronně.

Požadavky

O značkách indexu objektů blob

Značky indexu objektů blob kategorizují data v účtu úložiště pomocí atributů značek klíč-hodnota. Tyto značky se automaticky indexují a zveřejňují jako prohledávatelný multidimenzionální index, aby bylo možné snadno najít data. V tomto článku se dozvíte, jak nastavit, získat a najít data pomocí značek indexu objektů blob.

Značky indexu objektů blob nejsou podporované pro účty úložiště s povoleným hierarchickým oborem názvů. Další informace o funkci značky indexu objektů blob spolu se známými problémy a omezeními najdete v tématu Správa a vyhledání dat objektů blob pomocí značek indexu objektů blob.

Nastavení značek

Značky indexu můžete nastavit, pokud má váš kód autorizovaný přístup k datům objektů blob prostřednictvím jednoho z následujících mechanismů:

Další informace najdete v tématu Nastavení značek indexu objektů blob.

Značky můžete nastavit pomocí následující metody:

Zadané značky v této metodě nahradí existující značky. Pokud staré hodnoty musí být zachovány, musí být staženy a zahrnuty do volání této metody. Následující příklad ukazuje, jak nastavit značky:

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)

Všechny značky můžete odstranit předáním prázdného dict objektu set_blob_tags do metody:

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)

Získání značek

Pokud má váš kód autorizovaný přístup k datům objektů blob, můžete získat značky indexu prostřednictvím jednoho z následujících mechanismů:

Další informace najdete v tématu Získání a výpis značek indexu objektů blob.

Značky můžete získat pomocí následující metody:

Následující příklad ukazuje, jak načíst a iterovat značky objektu blob:

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)

Filtrování a hledání dat pomocí značek indexu objektů blob

Pomocí značek indexu můžete vyhledávat a filtrovat data, pokud váš kód má autorizovaný přístup k datům objektů blob prostřednictvím jednoho z následujících mechanismů:

Další informace najdete v tématu Hledání dat pomocí značek indexu objektů blob.

Poznámka:

K načtení předchozích verzí nemůžete použít značky indexu. Značky pro předchozí verze se nepředávají do indexového modulu objektů blob. Další informace naleznete v tématu Podmínky a známé problémy.

Data můžete najít pomocí následující metody:

Následující příklad najde a vypíše všechny objekty blob označené jako obrázek:

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)

Asynchronní nastavení značek indexu objektů blob

Klientská knihovna Azure Blob Storage pro Python podporuje asynchronní práci se značkami indexu objektů blob. Další informace o požadavcích na nastavení projektu najdete v tématu Asynchronní programování.

Pomocí následujících kroků nastavte značky indexu objektů blob pomocí asynchronních rozhraní API:

  1. Přidejte následující příkazy importu:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Přidejte kód pro spuštění programu pomocí asyncio.run. Tato funkce spustí předanou korutinu v main() našem příkladu a spravuje smyčku asyncio událostí. Koroutiny jsou deklarovány syntaxí async/await. V tomto příkladu main() korutin nejprve vytvoří nejvyšší úroveň BlobServiceClient pomocí async witha pak zavolá metodu, která nastaví značky indexu objektů blob. Mějte na paměti, že pouze klient nejvyšší úrovně musí používat async with, protože ostatní klienti, kteří z něj vytvořili, sdílejí stejný fond připojení.

    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. Přidejte kód pro nastavení značek indexu objektů blob. Kód je stejný jako synchronní příklad s tím rozdílem, že metoda je deklarována pomocí klíčového asyncawait slova a klíčové slovo se používá při volání get_blob_tags a set_blob_tags metody.

    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)
    

S tímto základním nastavením můžete implementovat další příklady v tomto článku jako koruty pomocí syntaxe async/await.

Zdroje informací

Další informace o použití značek indexů ke správě a hledání dat pomocí klientské knihovny azure Blob Storage pro Python najdete v následujících materiálech.

Operace rozhraní REST API

Sada Azure SDK pro Python obsahuje knihovny, které jsou postavené na rozhraní Azure REST API a umožňují interakci s operacemi rozhraní REST API prostřednictvím známých paradigmat Pythonu. Metody klientské knihovny pro správu a používání značek indexu objektů blob používají následující operace rozhraní REST API:

Ukázky kódu

Prostředky klientské knihovny

Viz také