次の方法で共有


TypeScript でデータを管理および検索するために BLOB インデックス タグを使う

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

前提条件

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

BLOB インデックス タグについて

キーと値のタグ属性を使用して、BLOB インデックス タグによってストレージ アカウント内のデータが分類されます。 これらのタグには自動的にインデックスが付けられ、検索可能な多次元インデックスとして公開されるため、データを簡単に見つけることができます。 この記事では、BLOB インデックス タグを使用してデータを設定、取得、および検索する方法について説明します。

階層型名前空間が有効になっているストレージ アカウントでは、BLOB インデックス タグはサポートされていません。 BLOB インデックス タグ機能と既知の問題および制限について詳しくは、「BLOB インデックス タグを使用して Azure BLOB データを管理および検索する」を参照してください。

タグを設定する

次のいずれかのメカニズムを使用してコードが BLOB データへのアクセスを認可されている場合は、インデックス タグを設定できます。

詳細については、BLOB インデックス タグの設定を参照してください。

BLOB アップロード時にタグを設定するには、BlobClient を作成してから、次のメソッドを使用します。

このタスクを実行する例を次に示します。

export async function setBlobTags(
  blockBlobClient: BlockBlobClient,
  tags: Tags
): Promise<void> {
  // Set tags
  const result = await blockBlobClient.setTags(tags);
  if (result.errorCode) throw Error(result.errorCode);

  console.log(`tags set for ${blockBlobClient.name}`);
}

空の JSON オブジェクトを setTags メソッドに渡すことによって、すべてのタグを削除できます。

関連記事
BLOB インデックス タグを使用して Azure BLOB データを管理および検索する
BloB タグを設定する (REST API)

タグを取得する

次のいずれかのメカニズムを使用してコードが BLOB データへのアクセスを認可されている場合は、インデックス タグを取得できます。

詳細については、「BLOB インデックス タグの取得と一覧表示」を参照してください。

タグを取得するには、BlobClient を作成してから、次のメソッドを使用します。

次の例は、BLOB のタグを取得して反復処理する方法を示しています。

export async function getBlobTags(
  blockBlobClient: BlockBlobClient
): Promise<Tags> {
  const getTagsResponse: BlobGetTagsResponse = await blockBlobClient.getTags();

  if (getTagsResponse.errorCode) throw Error(getTagsResponse.errorCode);

  // Tags: Record<string, string>
  const tags: Tags = getTagsResponse.tags;

  console.log(`tags for ${blockBlobClient.name}`);

  // Print out name/value pairs
  Object.keys(tags).map((tag) => console.log(`${[tag]}: ${tags[tag]}`));

  return tags;
}

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: BlobServiceClient,
  tagOdataQuery: string
): Promise<void> {
  // page size
  const maxPageSize = 10;

  let i = 1;

  const listOptions: ServiceFindBlobByTagsOptions = {};

  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
  const 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 操作を使用します。

コード サンプル

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

こちらもご覧ください