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
- Azure-prenumeration – skapa en kostnadsfritt
- Azure Storage-konto – skapa ett lagringskonto
- Python 3.8+
Konfigurera din miljö
Om du inte har ett befintligt projekt visar det här avsnittet hur du konfigurerar ett projekt för att arbeta med Azure Blob Storage-klientbiblioteket för Python. Mer information finns i Komma igång med Azure Blob Storage och Python.
Följ de här stegen för att konfigurera projektet om du vill arbeta med kodexemplen i den här artikeln.
Installera paket
Installera följande paket med :pip install
pip install azure-storage-blob azure-identity
Lägga till importinstruktioner
Lägg till följande import
-uttryck:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, ContentSettings
Auktorisering
Auktoriseringsmekanismen måste ha de behörigheter som krävs för att fungera med blobindextaggar. För auktorisering med Microsoft Entra-ID (rekommenderas) behöver du den inbyggda azure RBAC-rollen Storage Blob Data Owner eller senare. Mer information finns i auktoriseringsvägledningen för Get Blob Tags (REST API), Set Blob Tags (REST API) eller Find Blobs by Tags (REST API).
Skapa ett klientobjekt
Om du vill ansluta en app till Blob Storage skapar du en instans av BlobServiceClient. I följande exempel visas hur du skapar ett klientobjekt med hjälp av DefaultAzureCredential
för auktorisering:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)
Du kan också skapa klientobjekt för specifika containrar eller blobar, antingen direkt eller från objektet BlobServiceClient
. Mer information om hur du skapar och hanterar klientobjekt finns i Skapa och hantera klientobjekt som interagerar med dataresurser.
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:
- Säkerhetsobjekt som har tilldelats en Azure RBAC-roll med åtgärden Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write . Lagringsblobdataägaren är en inbyggd roll som innehåller den här åtgärden.
- Signatur för delad åtkomst (SAS) med behörighet att komma åt blobens taggar (
t
behörighet) - Kontonyckel
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:
- Säkerhetsobjekt som tilldelas en Azure RBAC-roll med åtgärden Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read . Lagringsblobdataägaren är en inbyggd roll som innehåller den här åtgärden.
- Signatur för delad åtkomst (SAS) med behörighet att komma åt blobens taggar (
t
behörighet) - Kontonyckel
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:
- Säkerhetsobjekt som har tilldelats en Azure RBAC-roll med åtgärden Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action . Lagringsblobdataägaren är en inbyggd roll som innehåller den här åtgärden.
- Signatur för delad åtkomst (SAS) med behörighet att filtrera blobar efter taggar (
f
behörighet) - Kontonyckel
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:
Lägg till följande importinstruktioner:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
Lägg till kod för att köra programmet med .
asyncio.run
Den här funktionen kör den skickade coroutinenmain()
i vårt exempel och hanterar händelseloopenasyncio
. Coroutines deklareras med syntaxen async/await. I det här exempletmain()
skapar coroutinen först den översta nivånBlobServiceClient
med ochasync with
anropar sedan metoden som anger blobindextaggar. Observera att endast klienten på den översta nivån behöver användaasync 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())
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 nyckelordetawait
används när du anroparget_blob_tags
metoderna ochset_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.
Kodexempel
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:
- Hämta blobtaggar (REST API)
- Ange blobtaggar (REST API)
- Hitta blobar efter taggar (REST API)
Klientbiblioteksresurser
Se även
- Hantera och hitta Azure Blob-data med blobindextaggar
- Använda blobindextaggar för att hantera och hitta data i Azure Blob Storage
Relaterat innehåll
- Den här artikeln är en del av utvecklarguiden för Blob Storage för Python. Mer information finns i den fullständiga listan över utvecklarguideartiklar i Skapa din Python-app.