Используйте теги индекса BLOB для управления данными и их поиска с помощью JavaScript и TypeScript.

В этой статье показано, как использовать теги индекса блобов для управления и поиска данных с помощью клиентской библиотеки служба хранилища Azure для JavaScript.

Предварительные требования

О тегах индекса BLOB

Теги индекса больших двоичных объектов классифицируют данные в учетной записи хранения с помощью атрибутов тегов типа "ключ-значение". Эти теги автоматически индексируются и представляются в виде многомерного индекса с поддержкой поиска для упрощения нахождения данных. В этой статье показано, как задавать, получать и находить данные с помощью тегов индекса больших двоичных объектов.

Теги индекса BLOB не поддерживаются для хранилищ с активированным иерархическим пространством имен. Дополнительные сведения о функции тега индекса BLOB-объектов вместе с известными проблемами и ограничениями см. в статье "Управление и поиск данных BLOB-объектов Azure с тегами индекса BLOB-объектов".

Настройка тегов

Теги индекса можно задать, если код имеет авторизованный доступ к данным BLOB с помощью одного из следующих механизмов:

Дополнительные сведения см. в статье Настройка тегов индекса объекта BLOB.

Теги можно задать с помощью следующего метода:

Указанные теги в этом методе заменяют существующие теги. Если старые значения должны быть сохранены, их необходимо скачать и включить в вызов этого метода. В следующем примере показано, как задать теги:

async function setBlobTags(containerClient, blobName) {
  const blockBlobClient = await containerClient.getBlockBlobClient(blobName);

  const tags = {
    'Sealed': 'false',
    'Content': 'image',
    'Date': '2022-07-18',
  }

  // Set tags
  await blockBlobClient.setTags(tags);
}

Все теги можно удалить, передав пустой объект JSON в setTags метод.

Получить теги

Теги индекса можно получить, если код имеет авторизованный доступ к данным блоб-объектов через один из следующих механизмов:

Дополнительные сведения см. в разделе Получение и перечисление тегов индекса BLOB-объектов.

Теги можно получить с помощью следующего метода:

В следующем примере показано, как получить и выполнить итерацию по тегам большого двоичного объекта.

async function getBlobTags(containerClient, blobName) {
  const blockBlobClient = await containerClient.getBlockBlobClient(blobName);

  // Get tags
  const result = await blockBlobClient.getTags();

  for (const tag in result.tags) {

      console.log(`TAG: ${tag}: ${result.tags[tag]}`);
  }
}

Фильтрация и поиск данных с blob-индейстагами

Теги индекса можно использовать для поиска и фильтрации данных, если код имеет авторизованный доступ к данным BLOB-объектов с помощью одного из следующих механизмов:

Дополнительные сведения см. в статье Поиск данных с помощью тегов индекса BLOB-объектов.

Примечание.

Вы не можете запросить теги индекса для получения предыдущих версий. Теги для предыдущих версий не передаются в обработчик индекса больших двоичных объектов. Дополнительные сведения см. в разделе Ограничения и известные проблемы.

Данные запрашиваются с помощью объекта JSON, отправленного в виде строки. Свойства необязательно должны содержать дополнительные строковые кавычки, но строковые значения должны быть указаны в кавычках.

В следующей таблице показано несколько строк запросов.

Строка запроса для тегов (tagOdataQuery) Описание
id='1' AND project='billing' Фильтрация BLOB-объектов по всем контейнерам на основе этих двух свойств
owner='PhillyProject' AND createdOn >= '2021-12' AND createdOn <= '2022-06' Фильтрация BLOB-объектов по всем контейнерам на основе строгого значения свойства для owner и диапазона дат для свойства createdOn.
@container = 'my-container' AND createdBy = 'Jill' Фильтрация по контейнеру и конкретному свойству. В этом запросе createdBy является текстовым соответствием и не означает соответствия авторизации через Active Directory.

Для поиска данных можно использовать один из следующих методов:

В следующем примере найдены все объекты BLOB, соответствующие параметру tagOdataQuery.

async function findBlobsByQuery(blobServiceClient, tagOdataQuery) {

  // page size
  const maxPageSize = 10;

  let i = 1;
  let marker;

  const listOptions = {
    includeMetadata: true,
    includeSnapshots: false,
    includeTags: true,
    includeVersions: false
  };

  let iterator = blobServiceClient.findBlobsByTags(tagOdataQuery, listOptions).byPage({ maxPageSize });
  let response = (await iterator.next()).value;

  // Prints blob names
  if (response.blobs) {
    for (const blob of response.blobs) {
      console.log(`Blob ${i++}: ${blob.name} - ${JSON.stringify(blob.tags)}`);
    }
  }

  // Gets next marker
  marker = response.continuationToken;
  
  // no more blobs
  if (!marker) return;
  
  // Passing next marker as continuationToken
  iterator = blobServiceClient
    .findBlobsByTags(tagOdataQuery, listOptions)
    .byPage({ continuationToken: marker, maxPageSize });
  response = (await iterator.next()).value;

  // Prints blob names
  if (response.blobs) {
    for (const blob of response.blobs) {
      console.log(`Blob ${i++}: ${blob.name} - ${JSON.stringify(blob.tags)}`);
    }
  }
}

В примере выходных данных для этой функции показаны соответствующие BLOB-объекты и их теги на основе кода console.log в предыдущей функции:

Ответ
Blob 1: set-tags-1650565920363-query-by-tag-blob-a-1.txt - {"создано":"2022-01","владелец":"PhillyProject","проект":"set-tags-1650565920363"}

Ресурсы

Дополнительные сведения об использовании тегов индекса для управления и поиска данных с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для JavaScript см. в следующих ресурсах.

Примеры кода

Операции REST API

Пакет SDK Azure для JavaScript содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API через знакомые парадигмы JavaScript. Методы библиотеки клиента для управления и использования тегов индекса BLOB-объектов используют следующие операции REST API.

Ресурсы клиентской библиотеки

См. также