Gerenciar e localizar dados de blob do Azure com tags de índice de blob

À medida que os conjuntos de dados aumentam, encontrar um objeto específico em um mar de dados pode ser difícil. As marcas de índice de blob fornecem funcionalidades de gerenciamento e descoberta de dados usando atributos de marca de índice do par chave-valor. Você pode categorizar e localizar objetos em um único contêiner ou em todos os contêineres em sua conta de armazenamento. À medida que os requisitos de dados mudam, os objetos podem ser categorizados de forma dinâmica atualizando suas marcas de índice. Os objetos podem permanecer no local com sua organização de contêiner atual.

As marcas de índice de blob permitem:

  • Categorizar dinamicamente seus blobs usando marcas de índice do par chave-valor

  • Localizar rapidamente blobs específicos marcados em uma conta de armazenamento inteira

  • Especificar comportamentos condicionais para APIs de blob com base na avaliação de marcas de índice

  • Usar marcas de índice para controles avançados em recursos como Gerenciamento de ciclo de vida de blob

Considere um cenário em que você tenha milhões de blobs em sua conta de armazenamento, acessados por vários aplicativos diferentes. Você deseja localizar todos os dados relacionados de um único projeto. Você não tem certeza do que está no escopo, pois os dados podem ser distribuídos em vários contêineres com diferentes convenções de nomenclatura. No entanto, seus aplicativos carregam todos os dados com marcas com base em seu projeto. Em vez de pesquisar por milhões de blobs e comparar nomes e propriedades, você pode usar Project = Contoso como seus critérios de descoberta. O índice de blob filtrará todos os contêineres em toda a conta de armazenamento para localizar e retornar rapidamente apenas o conjunto de 50 blobs de Project = Contoso.

Para começar com exemplos de como usar o índice de blob, consulte Usar marcas de índice de blob para gerenciar e localizar dados .

Marcas de índice de blob e gerenciamento de dados

Os prefixos de nome de contêiner e blob são categorizações unidimensionais. As marcas de índice de blob permitem a categorização multidimensional para tipos de dados de blob (bloco, acréscimo ou página). A categorização multidimensional é indexada nativamente pelo Armazenamento de blobs do Azure para que você possa localizar seus dados rapidamente.

Considere os cinco blobs a seguir em sua conta de armazenamento:

  • container1/transaction.csv

  • container2/campaign.docx

  • photos/bannerphoto.png

  • archives/completed/2019review.pdf

  • logs/2020/01/01/logfile.txt

Esses blobs são separados usando um prefixo de contêiner/pasta virtual/nome do blob. Você pode definir um atributo de marca de índice de Project = Contoso nesses cinco blobs para categorizá-los ao mesmo tempo em que mantém sua organização de prefixo atual. A adição de marcas de índice elimina a necessidade de mover dados expondo a capacidade de filtrar e localizar dados usando o índice.

Configuração de marcas de índice de blob

Marcas de índice de blob são atributos do par chave-valor que podem ser aplicados a objetos novos ou existentes em sua conta de armazenamento. Você pode especificar marcas de índice durante o processo de carregamento usando Colocar blob, Colocar lista de blocos ou operações de Copiar blob e o cabeçalho x-ms-tags opcional. Se você já tiver blobs em sua conta de armazenamento, chame Definir marcas de blob passando um documento XML formatado com as marcas de índice no corpo da solicitação.

Importante

A configuração de marcas de índice de blob pode ser executada pelo Proprietário de dados do blob de armazenamento e por qualquer pessoa com uma assinatura de acesso compartilhado que tenha permissão para acessar as marcas do blob (a t permissão de SAS).

Além disso, os usuários do RBAC com a permissão Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write podem executar essa operação.

Você pode aplicar uma única marca em seu blob para descrever quando seus dados concluíram o processamento.

"processedDate" = '2020-01-01'

Você pode aplicar várias marcas em seu blob para que sejam mais descritivas em relação aos dados.

"Project" = 'Contoso' "Classified" = 'True' "Status" = 'Unprocessed' "Priority" = '01'

Para modificar os atributos de marca de índice existentes, recupere os atributos de marca existentes, modifique-os e substitua pela operação Definir marcas de blob. Para remover todas as marcas de índice do blob, chame a operação Set Blob Tags sem atributos de marca especificados. Como as marcas de índice de blob são um sub-recurso para o conteúdo de dados de blob, Set Blob Tags não modifica nenhum conteúdo subjacente e não altera a hora da última modificação ou a eTag do blob. É possível criar ou modificar marcas de índice para todos os blobs de base atuais. As marcas de índice também são preservadas para versões anteriores, mas não são passadas para o mecanismo de índice de blob, portanto, não é possível consultar marcas de índice para recuperar versões anteriores. As marcas de instantâneos ou de blobs excluídos temporariamente não podem ser modificadas.

Os seguintes limites se aplicam a marcas de índice de blob:

  • Cada blob pode ter até 10 marcas de índice de blob

  • As chaves de marca precisam ter entre um e 128 caracteres.

  • Os valores de marca precisam ter entre zero e 256 caracteres.

  • As chaves e os valores de marca diferenciam maiúsculas de minúsculas.

  • As chaves e valores de marca dão suporte apenas a tipos de dados de cadeia de caracteres. Os números, as datas, as horas ou os caracteres especiais são salvos como cadeias de caracteres.

  • Se o controle de versão estiver habilitado, as marcas de índice serão aplicadas a uma versão específica do blob. Se você definir marcas de índice na versão atual e uma versão for criada, a marca não será associada à nova versão. A marca só será associada à versão anterior.

  • As chaves e os valores de marca devem aderir às seguintes regras de nomenclatura:

    • Caracteres alfanuméricos:

      • a a z (letras minúsculas)

      • A a Z (letras maiúsculas)

      • 0 a 9 (números)

    • Caracteres especiais válidos: espaço, mais, menos, ponto, dois pontos, igual, sublinhado, barra ( +-.:=_/)

Dica

Você pode usar uma tarefa de armazenamento para definir marcas em objetos em escala em várias contas de armazenamento com base em um conjunto de condições que você definir. Uma conta de armazenamento é um recurso disponível em Ações de Armazenamento do Azure; uma estrutura sem servidor que você pode usar para executar operações de dados comuns em milhões de objetos em várias contas de armazenamento. Para saber mais, consulte O que são as Ações de Armazenamento do Azure?.

Obtenção e listagem de marcas de índice de Blob

As marcas de índice de blob são armazenadas como um sub-recurso junto aos dados de blob e podem ser recuperadas independentemente do conteúdo dos dados de blob subjacente. As marcas de índice de blob para um único blob podem ser recuperadas com a operação Obter marcas de blob. A operação Listar blobs com o parâmetro include:tags também retornará todos os blobs dentro de um contêiner, junto com suas marcas de índice de blob.

Importante

A obtenção e a listagem de marcas de índice de blob podem ser executadas pelo Proprietário de dados do blob de armazenamento e por qualquer pessoa com uma assinatura de acesso compartilhado que tenha permissão para acessar as marcas do blob (a t permissão de SAS).

Além disso, os usuários do RBAC com a permissão Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read podem executar essa operação.

Para qualquer blob com pelo menos uma marca de índice de blob, x-ms-tag-count é retornado nas operações Listar blobs, Obter blobe Obter propriedades de blob, indicando a contagem de marcas de índice no blob.

Localização de dados usando marcas de índice de blob

O mecanismo de indexação expõe seus atributos do par chave-valor em um índice multidimensional. Depois de definir as marcas de índice, elas ficam registradas no blob e podem ser recuperadas imediatamente.

Pode levar algum tempo até que o índice do blob seja atualizado. Isso é verdadeiro tanto para adicionar marcas quanto para editar as existentes. O tempo necessário depende da carga de trabalho. Por exemplo, se uma operação Definir marcas de Blob levar 30 minutos para ser concluída a uma taxa de 15.000 a 20.000 transações por segundo, poderá levar até 10 minutos para indexar todos esses blobs. Em uma taxa menor, o atraso na indexação pode ser inferior a um segundo. A distribuição do tráfego também afeta os atrasos na indexação. Por exemplo, se um aplicativo cliente definir marcas nos blobs em ordem sequencial no mesmo contêiner, o atraso poderá ser maior do que seria se as marcas fossem aplicadas aos blobs que não estão localizados juntos.

Depois que o índice de blob for atualizado, você poderá usar os recursos nativos de consulta e descoberta oferecidos pelo Armazenamento de blobs.

A operação Localizar blobs por marcas permite que você obtenha um conjunto filtrado de blobs cujas marcas de índice correspondem a uma determinada expressão de consulta. Find Blobs by Tags oferece suporte à filtragem em todos os contêineres em sua conta de armazenamento ou você pode fazer o escopo da filtragem para apenas um único contêiner. Como todos os valores e chaves de marca de índice são cadeias de caracteres, os operadores relacionais usam uma classificação lexicográfica.

Importante

A ação de encontrar dados usando as marcas de índice de blob pode ser executada pelo Proprietário de Dados do Blob de Armazenamento e por qualquer pessoa com uma Assinatura de Acesso Compartilhado que tenha permissão para encontrar blobs pelas marcas (a permissão de SAS f).

Além disso, os usuários do RBAC com a permissão Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action podem executar essa operação.

Os critérios a seguir se aplicam à filtragem de índice de blob:

  • A chaves de marca devem ser colocadas entre aspas duplas (")

  • Os valores de marca e os nomes de contêiner devem ser colocados entre aspas simples (')

  • O caractere @ só é permitido para filtragem em um nome de contêiner específico (por exemplo, @container = 'ContainerName')

  • Os filtros são aplicados com a classificação lexicográfica em cadeias de caracteres

  • As operações de intervalo de mesmo lado na mesma chave são inválidas (por exemplo, "Rank" > '10' AND "Rank" >= '15')

  • Ao usar REST para criar uma expressão de filtro, os caracteres devem ser codificados em URI

  • As consultas de marcação são otimizadas para correspondência de igualdade usando uma única marcação (por exemplo, StoreID = "100"). As consultas de intervalo que usam uma só marca envolvendo >, >=, < e <= também são eficientes. Qualquer consulta que use AND com mais de uma marcação não será tão eficiente. Por exemplo, Cost > "01" AND Cost <= "100" é eficiente. Cost > "01 AND StoreID = "2" não é tão eficiente.

A tabela abaixo mostra todos os operadores válidos para Find Blobs by Tags:

Operador Descrição Exemplo
= Igual a "Status" = 'In Progress'
> Maior que "Date" > '2018-06-18'
>= Maior ou igual "Priority" >= '5'
< Menor que "Age" < '32'
<= Inferior ou igual "Priority" <= '5'
AND AND lógico "Rank" >= '010' AND "Rank" < '100'
@container Escopo para um contêiner específico @container = 'videofiles' AND "status" = 'done'

Observação

Esteja familiarizado com a ordenação lexicográfica ao configurar e consultar marcas.

  • Os números são classificados antes das letras. Os números são classificados com base no primeiro dígito.
  • As letras maiúsculas são classificadas antes das letras minúsculas.
  • Os símbolos não são padrão. Alguns símbolos são classificados antes de valores numéricos. Outros símbolos são classificados antes ou depois das letras.

Operações de blob condicional com marcas de índice de blob

Nas versões REST 2019-10-10 e superiores, a maioria das APIs de serviço blob agora oferece suporte a um cabeçalho condicional, x-ms-if-tags, de modo que a operação só terá sucesso se a condição de índice de blob especificada for atendida. Se a condição não for atendida, você obterá error 412: The condition specified using HTTP conditional header(s) is not met.

O cabeçalho x-ms-if-tags pode ser combinado com os outros cabeçalhos condicionais HTTP existentes (If-Match, If-None-Match e assim por diante). Se vários cabeçalhos condicionais forem fornecidos em uma solicitação, todos eles deverão ser avaliados como verdadeiros para que a operação tenha sucesso. Todos os cabeçalhos condicionais são efetivamente combinados com AND lógico.

A tabela abaixo mostra os operadores válidos para operações condicionais:

Operador Descrição Exemplo
= Igual "Status" = 'In Progress'
<> Diferente "Status" <> 'Done'
> Maior que "Date" > '2018-06-18'
>= Maior ou igual "Priority" >= '5'
< Menor que "Age" < '32'
<= Inferior ou igual "Priority" <= '5'
AND AND lógico "Rank" >= '010' AND "Rank" < '100'
OU OR lógico "Status" = 'Done' OR "Priority" >= '05'

Observação

Há dois operadores adicionais, não iguais e lógicos ou, que são permitidos no cabeçalho condicional x-ms-if-tags para operações de blob, mas não existem na operação Find Blobs by Tags.

Integrações de plataforma com marcas de índice de blob

Marcas de índice de blob não apenas ajudam a categorizar, gerenciar e pesquisar em seus dados de blob, mas também fornecem integração com outros recursos de Armazenamento de blobs, como o Gerenciamento do ciclo de vida.

Gerenciamento do ciclo de vida

Usando o blobIndexMatch como um filtro de regra no gerenciamento do ciclo de vida, você pode mover dados para camadas mais frias ou excluir dados com base nas marcas de índice aplicadas aos seus blobs. Você pode ser mais granular em suas regras e mover ou excluir somente blobs se eles corresponderem aos critérios de marcas especificados.

Você pode definir uma correspondência de índice de blob como um conjunto de filtros autônomo em uma regra de ciclo de vida para aplicar ações em dados marcados. Ou você pode combinar um prefixo e um índice de blob para corresponder a conjuntos de dados mais específicos. A especificação de vários filtros em uma regra de ciclo de vida aplica-se uma operação de AND lógico. A ação será aplicada somente se todos os critérios de filtro corresponderem.

A seguinte regra de gerenciamento do ciclo de vida de exemplo se aplica ao blob de blocos em um contêiner chamado videofiles. Os blobs de camadas de regra são para armazenamento de arquivo morto somente se os dados corresponderem aos critérios de marca de índice de blob de "Status" == 'Processed' AND "Source" == 'RAW'.

Exemplo de regra de correspondência de índice de blob para gerenciamento de ciclo de vida no portal do Microsoft Azure

Permissões e autorização

Você pode autorizar o acesso a marcas de índice de blob usando uma das seguintes abordagens:

As marcas de índice de blob são um sub-recurso para os dados de blob. Um usuário com permissões ou um token de SAS para ler ou gravar blobs pode não ter acesso às marcas de índice de blob.

Controle de acesso baseado em função

Os chamadores usando uma identidade do Microsoft Entra podem receber as seguintes permissões para operar em marcas de índice de blob.

Operações de marca de índice de blob Ação do RBAC do Microsoft Azure
Definir marcas de blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write
Obter marcas de blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read
Localizar blobs por marcas Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action

Permissões adicionais, separadas dos dados de blob subjacentes, são necessárias para operações de marca de índice. A função de Proprietário de dados de blob de armazenamento recebe permissões para todas as três operações de marca de índice de blob.

Permissões de SAS

Os chamadores que usam uma SAS (assinatura de acesso compartilhado) podem receber permissões no escopo para operar em marcas de índice de blob.

SAS de serviço para um blob

As permissões a seguir podem ser concedidas em uma SAS de serviço para um blob para permitir o acesso a marcas de índice de blob. As permissões de leitura (r) e gravação (w) de blob não são suficientes para permitir a leitura ou gravação de suas marcas de índice.

Permissão Símbolo de URI Operações permitidas
Marcas de índice t Obter e definir marcas de índice para um blob

SAS de serviço para um contêiner

As permissões a seguir podem ser concedidas em uma SAS de serviço para um contêiner para permitir a filtragem em marcas de blob. A permissão lista de blob (i) não é suficiente para permitir a filtragem de blobs por suas marcas de índice.

Permissão Símbolo de URI Operações permitidas
Marcas de índice f Localizar blobs com marcas de índice

SAS de Conta

As permissões a seguir podem ser concedidas em uma SAS de Conta para permitir o acesso a marcas de índice de blob e filtragem em marcas de blob.

Permissão Símbolo de URI Operações permitidas
Marcas de índice t Obter e definir marcas de índice para um blob
Marcas de índice f Localizar blobs com marcas de índice

As permissões de leitura (r) e gravação (w) de blob sozinhas não são suficientes para permitir a leitura ou gravação de suas marcas de índice, e a permissão List (i) não é suficiente para permitir a filtragem de blobs por suas marcas de índice.

Escolha entre marcas de índice de blobs e metadados

As marcas de índice de blob e os metadados fornecem a capacidade de armazenar propriedades de chave-valor, definidas pelo usuário, junto com um recurso de blob. Ambos podem ser recuperados e definidos diretamente, sem retornar ou alterar o conteúdo do blob. É possível usar as marcas de índice e de metadados.

Somente as marcas de índice são indexadas automaticamente e tornam-se pesquisáveis pelo serviço de armazenamento de blob nativo. Os metadados não podem ser indexados nativamente ou pesquisados. Você deve usar um serviço separado, como o Azure Search. Marcas de índice de blob têm permissões adicionais para leitura, filtragem e gravação que são separadas dos dados de blob subjacentes. Os metadados usam as mesmas permissões que o blob e são retornados como cabeçalhos HTTP pelas operações Obter blob e Obter propriedades de blob. Marcas de índice de blob são criptografadas em repouso usando uma Chave gerenciada pela Microsoft. Os metadados são criptografados em repouso usando a mesma chave de criptografia especificada para dados de blob.

A tabela a seguir resume as diferenças entre as marcas de índice de blob e os metadados:

Metadados Marcas de índice do blob
Limites Nenhum limite numérico, total de 8 KB, não diferencia maiúsculas de minúsculas Máximo de 10 marcas por blob, 768 bytes por marca, diferencia maiúsculas de minúsculas
Atualizações Não permitido na camada de arquivo, Set Blob Metadata substitui todos os metadados existentes, Set Blob Metadata altera a hora da última modificação do blob Permitido para todas as camadas de acesso, Set Blob Tags substitui todas as marcas existentes, Set Blob Tags não altera a hora da última modificação do blob
Storage Armazenado com os dados do blob Sub-recurso dos dados do blob
Indexação e Consulta Você deve usar um serviço separado, como o Azure Search Recursos de indexação e consulta incorporados ao Armazenamento de blob
Criptografia Criptografado em repouso com a mesma chave de criptografia usada para dados de blob Criptografado em repouso com uma chave de criptografia gerenciada pela Microsoft
Preços O tamanho dos metadados está incluído nos custos de armazenamento de um blob Custo fixo por marca de índice
Resposta de cabeçalho Metadados retornados como cabeçalhos em Get Blob e Get Blob Properties Contagem de marcas retornada por Get Blob ou Get Blob Properties, marcas retornadas somente por Get Blob Tags e List Blobs
Permissões As permissões de leitura ou gravação para dados de blob se estendem aos metadados Permissões adicionais são necessárias para ler, filtrar ou gravar marcas de índice
Nomenclatura Os nomes de metadados devem seguir as regras de nomenclatura para identificadores C# As marcas de índice de blob oferecem suporte a um intervalo mais amplo de caracteres alfanuméricos

Preços

Você é cobrado pelo número médio mensal de marcas de índice em uma conta de armazenamento. Não há custo para o mecanismo de indexação. As solicitações para Definir Marcas de Blob, Obter Marcas de Blob e Encontrar Marcas de Blob são cobradas com base nas respectivas taxas de transação atuais. Observe que o número de transações de lista consumidas ao executar uma transação Encontrar Blobs por Marca é igual ao número de cláusulas na solicitação. Por exemplo, a consulta (StoreID = 100) equivale a uma transação de lista. A consulta (StoreID = 100 AND SKU = 10010) equivale a duas transações de lista. Para saber mais, consulte Preço de blob de blocos.

Suporte a recursos

O suporte para esse recurso pode ser afetado ao habilitar o Data Lake Storage Gen2, o protocolo NFS (Sistema de Arquivos de Rede) 3.0 ou o protocolo SFTP (Protocolo de Transferência de Arquivo SSH). Se você tiver habilitado qualquer um desses recursos, consulte o Suporte a recursos de Armazenamento de Blobs nas contas de Armazenamento do Azure para avaliar o suporte para esse recurso.

Condições e problemas conhecidos

Esta seção descreve problemas e condições comuns.

  • Há suporte apenas para contas v2 de uso geral e contas de blob de blocos Premium. Não há suporte para blob de páginas Premium, blob herdado e contas com um namespace hierárquico habilitado. Não haverá suporte para contas de uso geral v1.

  • O carregamento de blobs de páginas com marcas de índice não mantém as marcas. Defina as marcas depois de carregar um blob de páginas.

  • Se o controle de versão de blob estiver habilitado, ainda será possível usar marcas de índice na versão atual. As marcas de índice são preservadas para versões anteriores, mas elas não são passadas para o mecanismo de índice de blob, portanto, não é possível usá-las para recuperar versões anteriores. Se você promover uma versão anterior para a versão atual, as marcas dessa versão anterior se tornarão as marcas da versão atual. Como essas marcas estão associadas à versão atual, elas são passadas para o mecanismo de índice de blob e é possível consultá-las.

  • Não há API para determinar se as marcas de índice estão indexadas.

  • O gerenciamento do ciclo de vida é compatível com as verificações de igualdade com correspondência de índice de blob.

  • Copy Blob não copia marcas de índice de blob do blob de origem para o novo blob de destino. Você pode especificar as marcas que deseja aplicar ao blob de destino durante a operação de cópia.

Perguntas frequentes

Consulte Perguntas frequentes sobre marcas de índice de Blob.

Próximas etapas

Para obter um exemplo de como usar o índice de blob, consulte Usar o índice de blob para gerenciar e localizar dados.

Saiba mais sobre o Gerenciamento do ciclo de vida e defina uma regra com correspondência de índice de blob.