通过 JavaScript 使用 Blob 索引标记来管理和查找数据

本文介绍如何使用 Blob 索引标记通过适用于 JavaScript 的 Azure 存储客户端库来管理和查找数据。

先决条件

关于 blob 索引标记

Blob 索引标记使用键值标记属性对存储帐户中的数据进行分类。 这些标记会自动索引,并作为可搜索的多维索引公开,便于你轻松查找数据。 本文介绍了如何使用 blob 索引标记来设置、获取和查找数据。

启用了分层命名空间的存储帐户不支持 Blob 索引标记。 若要详细了解 Blob 索引标记功能以及已知问题和限制,请参阅通过 Blob 索引标记管理和查找 Azure Blob 数据

设置标记

如果代码通过以下一种机制授权访问 Blob 数据,则可以设置索引标记:

有关详细信息,请参阅设置 Blob 索引标记

若要在 Blob 上传时设置标记,请创建 BlobClient,然后使用以下方法:

以下示例执行此任务。

// A blob can have up to 10 tags. 
//
// const tags = {
//   project: 'End of month billing summary',
//   reportOwner: 'John Doe',
//   reportPresented: 'April 2022'
// }
async function setTags(containerClient, blobName, tags) {

  // Create blob client from container client
  const blockBlobClient = await containerClient.getBlockBlobClient(blobName);

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

  console.log(`uploading blob ${blobName}`);
}

可以通过将空 JSON 对象传递到 setTags 方法来删除所有标记。

相关文章
通过 Blob 索引标记管理和查找 Azure Blob 数据
设置 Blob 标记 (REST API)

获取标记

如果代码通过以下一种机制授权访问 Blob 数据,则可以获取索引标记:

有关详细信息,请参阅获取和列出 Blob 索引标记

若要获取标记,请创建 BlobClient,然后使用以下方法:

以下示例演示如何获取和循环访问 Blob 的标记。

async function getTags(containerClient, blobName) {

  // Create blob client from container client
  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 索引标记查找数据

注意

不能使用索引标记来检索以前的版本。 以前版本的标记不会传递给 blob 索引引擎。 有关详细信息,请参阅条件和已知问题

使用以字符串形式发送的 JSON 对象查询数据。 这些属性不需要其他字符串引号,但值确实需要其他字符串引号。

下表展示了一些查询字符串:

标记的查询字符串 (tagOdataQuery) 说明
id='1' AND project='billing' 基于这两个属性筛选所有容器的 Blob
owner='PhillyProject' AND createdOn >= '2021-12' AND createdOn <= '2022-06' 基于 owner 的严格属性值和 createdOn 属性的日期范围在所有容器中筛选 blob。
@container = 'my-container' AND createdBy = 'Jill' 按容器和特定属性进行筛选。 在此查询中,createdBy 是文本匹配项,不指示通过 Active Directory 进行授权匹配。

若要查找 blob,请创建 BlobClient,然后使用以下方法:

以下示例查找与 tagOdataQuery 参数匹配的所有 blob。

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)}`);
    }
  }
}

此函数的示例输出基于上一函数中的 console.log 代码显示匹配的 blob 及其标记:

响应
Blob 1: set-tags-1650565920363-query-by-tag-blob-a-1.txt - {"createdOn":"2022-01","owner":"PhillyProject","project":"set-tags-1650565920363"}

资源

若要详细了解如何使用索引标记通过适用于 JavaScript 的 Azure Blob 存储客户端库来管理和查找数据,请参阅以下资源。

REST API 操作

Azure SDK for JavaScript 包含基于 Azure REST API 而生成的库,允许你通过熟悉的 JavaScript 范例与 REST API 操作进行交互。 用于管理和使用 Blob 索引标记的客户端库方法使用以下 REST API 操作:

代码示例

客户端库资源

请参阅