Compartilhar via


Usar categorias de índice de blob para gerenciar e localizar dados com o Go

Este artigo mostra como usar marcas de índice de blob para gerenciar e localizar dados usando o módulo de cliente do Armazenamento do Microsoft Azure para Go.

Pré-requisitos

Configure seu ambiente

Se você não tiver um projeto existente, esta seção mostrará como configurar um projeto para trabalhar com o módulo de cliente do Armazenamento de Blobs do Azure para Go. As etapas incluem a instalação do módulo, a adição de caminhos import e a criação de um objeto cliente autorizado. Para obter detalhes, consulte Introdução ao Armazenamento de Blobs do Azure e Go.

Instalar módulos

Instale o módulo azblob usando o seguinte comando:

go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob

Para autenticar com o Microsoft Entra ID (recomendado), instale o módulo azidentity usando o comando a seguir:

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

Adicionar caminhos de importação

No arquivo de código, adicione os seguintes caminhos de importação:

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

Esses caminhos de importação representam o mínimo necessário para começar. Alguns exemplos de código neste artigo podem exigir caminhos de importação adicionais. Para obter detalhes específicos e uso de exemplo, consulte Exemplos de código.

Criar um objeto cliente

Para conectar um aplicativo ao Armazenamento de Blobs, crie um objeto cliente usando azblob.NewClient. O exemplo a seguir mostra como criar um objeto cliente usando DefaultAzureCredential para autorização:

func getServiceClientTokenCredential(accountURL string) *azblob.Client {
    // Create a new service client with token credential
    credential, err := azidentity.NewDefaultAzureCredential(nil)
    handleError(err)

    client, err := azblob.NewClient(accountURL, credential, nil)
    handleError(err)

    return client
}

Autorização

O mecanismo de autorização deve ter as permissões necessárias para trabalhar com marcas de índice de blob. Para autorização com a ID do Microsoft Entra (recomendado), você precisa do Proprietário de Dados de Blob de Armazenamento de Função interna do RBAC do Azure ou superior. Para saber mais, confira as diretrizes de autorização para Obter Categorias de Blob , Definir Categorias de Blob ou Localizar Blobs por Categorias.

Gravar marcas de índice de blob

As marcas de índice de blob categorizam os dados na sua conta de armazenamento usando atributos de marca de chave-valor. Essas marcas são indexadas automaticamente e expostas como um índice multidimensional pesquisável para localizar dados com facilidade. Este artigo mostra como definir, obter e localizar dados usando marcas de índice de blob.

Não há suporte para marcas de índice de blob para contas de armazenamento com namespace hierárquico habilitado. Para saber mais sobre o recurso de marca de índice de blob, juntamente com problemas e limitações conhecidos, confira Gerenciar e localizar dados de Blob do Azure com marcas de índice de blob.

Editar marcas

Você poderá definir marcas de índice se o código tiver acesso autorizado aos dados de blob por meio de um dos seguintes mecanismos:

Para obter mais informações, consulte Configuração de marcas de índice de blob.

Defina marcas usando o seguinte método:

As categorias especificadas neste método substituem as categorias existentes. Se os valores existentes precisarem ser preservados, eles deverão ser baixados e incluídos na chamada para esse método. O seguinte exemplo mostra como definir marcas:

func setBlobTags(client *azblob.Client, containerName string, blobName string) {
    // Reference the blob as a client object
    blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)

    // Get existing tags for the blob if they need to be preserved
    resp, err := blobClient.GetTags(context.TODO(), nil)
    handleError(err)
    tags := make(map[string]string)
    for _, v := range resp.BlobTags.BlobTagSet {
        tags[*v.Key] = *v.Value
    }

    // Add or modify blob tags
    var updated_tags = make(map[string]*string)
    updated_tags["tag1"] = to.Ptr("value1")
    updated_tags["tag2"] = to.Ptr("value2")

    // Combine existing tags with new tags
    for k, v := range updated_tags {
        tags[k] = *v
    }

    // Set blob tags
    _, err = blobClient.SetTags(context.TODO(), tags, nil)
    handleError(err)
}

Você pode remover todas as categorias chamando SetTags sem categorias, conforme mostrado no exemplo a seguir:

func clearBlobTags(client *azblob.Client, containerName string, blobName string) {
    // Reference the blob as a client object
    blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)

    // Clear blob tags
    _, err := blobClient.SetTags(context.TODO(), make(map[string]string), nil)
    handleError(err)
}

Obter marcas

Você poderá obter marcas de índice se o código tiver acesso autorizado aos dados de blob por meio de um dos seguintes mecanismos:

Para obter mais informações, consulte Obtendo e listando marcas de índice de blob.

Obtenha marcas usando o seguinte método:

O seguinte exemplo mostra como recuperar e iterar as marcas do blob:

func getBlobTags(client *azblob.Client, containerName string, blobName string) {
    // Reference the blob as a client object
    blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)

    // Get the blob tags
    resp, err := blobClient.GetTags(context.TODO(), nil)
    handleError(err)

    // Print the blob tags
    for _, v := range resp.BlobTags.BlobTagSet {
        fmt.Printf("Key: %v, Value: %v\n", *v.Key, *v.Value)
    }
}

Filtre e localize dados com marcas de índice de blob

Você poderá usar marcas de índice para localizar e filtrar dados se o código tiver acesso autorizado aos dados de blob por meio de um dos seguintes mecanismos:

Para obter mais informações, consulte Localizando dados usando marcas de índice de blob.

Observação

Não é possível usar marcas de índice para recuperar versões anteriores. As marcas para versões anteriores não são passadas para o mecanismo de índice de blob. Para obter mais informações, consulte Condições e problemas conhecidos.

Você pode filtrar dados de blob com base em categorias de índice usando o seguinte método:

O seguinte exemplo localiza e lista todos os blobs marcados como uma imagem:

func findBlobsByTags(client *azblob.Client, containerName string, blobName string) {
    // Reference the container as a client object
    containerClient := client.ServiceClient().NewContainerClient(containerName)

    // Filter blobs by tags
    where := "\"Content\"='image'"
    opts := container.FilterBlobsOptions{MaxResults: to.Ptr(int32(10))}
    resp, err := containerClient.FilterBlobs(context.TODO(), where, &opts)
    handleError(err)

    // Print the blobs found
    for _, blobItem := range resp.FilterBlobSegment.Blobs {
        fmt.Printf("Blob name: %v\n", *blobItem.Name)
    }
}

Observação

Os exemplos de código neste guia destinam-se a ajudá-lo a começar a usar o Armazenamento de Blobs do Azure e o Go. Você deve modificar o tratamento de erros e valores Context para atender às necessidades do aplicativo.

Recursos

Para saber mais sobre como usar as categorias de índice para gerenciar e localizar dados usando a biblioteca de clientes de Armazenamento de Blobs do Azure para Go, consulte os recursos a seguir.

Exemplos de código

Operações da API REST

O SDK do Azure para linguagem Go contém bibliotecas que se baseiam na API REST do Azure, permitindo a interação com as operações de API REST por meio de paradigmas conhecidos do Go. Os métodos da biblioteca de clientes para gerenciar e usar marcas de índice de blob usam as seguintes operações da API REST:

Recursos do módulo cliente

Confira também

  • Este artigo faz parte do guia para desenvolvedores do Armazenamento de Blobs para Go. Para saber mais, veja a lista completa de artigos do guia do desenvolvedor em Criar seu aplicativo Go.