次の方法で共有


JavaScript を使用してデータを管理および検索するために BLOB インデックス タグを使用する

この記事では、JavaScript 用 Azure Storage クライアント ライブラリを使用してデータを管理および検索するために BLOB インデックス タグを使用する方法について説明します。

前提条件

  • この記事の例では、JavaScript 用の Azure Blob Storage クライアント ライブラリを操作するように設定されたプロジェクトが、既にあることを前提としています。 パッケージのインストール、モジュールのインポート、データ リソースの操作が認可されたクライアント オブジェクトの作成など、プロジェクトの設定については、「Azure Blob Storage および JavaScript の概要」を参照してください。
  • 認可メカニズムには、BLOB インデックス タグを操作するためのアクセス許可が必要です。 詳細については、次の REST API 操作の認可ガイダンスを参照してください。

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 インデックス タグを使用したデータの検索」を参照してください。

Note

インデックス タグを使用して以前のバージョンを取得することはできません。 以前のバージョンのタグは BLOB インデックス エンジンに渡されません。 詳細については、条件と既知の問題に関するページを参照してください。

データのクエリが、文字列として送信された JSON オブジェクトを使用して行われます。 プロパティには文字列引用符を追加する必要はありませんが、値には文字列引用符を追加する必要があります。

次の表にいくつかのクエリ文字列を示します。

タグのクエリ文字列 (tagOdataQuery) 説明
id='1' AND project='billing' これら 2 つのプロパティに基づいてすべてのコンテナーで 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)}`);
    }
  }
}

また、この関数の出力例は一致する BLOB とそのタグを、前の関数の console.log コードに基づいて示します。

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

リソース

JavaScript 用 Azure Blob Storage クライアント ライブラリを使用して、インデックス タグを使用したデータの管理と検索を行う方法の詳細については、次のリソースを参照してください。

REST API の操作

Azure SDK for JavaScript には Azure REST API に基づいて構築されたライブラリが含まれるため、使い慣れた JavaScript パラダイムを通じて REST API 操作を利用できます。 BLOB インデックス タグを管理および使用するためのクライアント ライブラリ メソッドは、次の REST API 操作を使用します。

コード サンプル

クライアント ライブラリのリソース

こちらもご覧ください