Python で BLOB インデックス タグを使用してデータを管理および検索する
この記事では、Python 用 Azure Storage クライアント ライブラリを使用して、BLOB インデックス タグを使用したデータの管理と検索を行う方法について説明します。
非同期 API を使用して BLOB インデックス タグを設定する方法については、「BLOB インデックス タグを非同期に設定する」を参照してください。
前提条件
- Azure サブスクリプション - 無料アカウントを作成する
- Azure Storage アカウント - ストレージ アカウントの作成
- python=3.8.10
環境を設定する
既存のプロジェクトがない場合、Python 用 Azure Blob Storage クライアント ライブラリを操作するためのプロジェクトをセットアップする方法についてこのセクションで説明します。 詳細については、「Azure Blob Storage と Python で作業を開始する」を参照してください。
この記事のコード例を使用するには、次の手順に従ってプロジェクトを設定します。
パッケージをインストールする
pip install
を使用して次のパッケージをインストールしてください。
pip install azure-storage-blob azure-identity
import ステートメントを追加する
次の import
ステートメントを追加します。
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, ContentSettings
承認
認可メカニズムには、BLOB インデックス タグを操作するために必須のアクセス許可が必要です。 Microsoft Entra ID を使用した認可 (推奨) には、Azure RBAC 組み込みロールの Storage BLOB データ所有者以上が必要です。 詳細については、「Get Blob Tags (REST API)」、「Set Blob Tags (REST API)」、または「Find Blobs by Tags (REST API)」の認可ガイダンスを参照してください。
クライアント オブジェクトの作成
アプリを Blob Storage に接続するには、 BlobServiceClientのインスタンスを作成します。 次の例では、認可のために DefaultAzureCredential
を使用してクライアント オブジェクトを作成する方法を示します。
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)
また、特定のコンテナーまたは BLOB 用のクライアント オブジェクトを、直接または BlobServiceClient
オブジェクトから作成することもできます。 クライアント オブジェクトの作成と管理の詳細については、「データ リソースを操作するクライアント オブジェクトを作成および管理する」を参照してください。
BLOB インデックス タグについて
キーと値のタグ属性を使用して、BLOB インデックス タグによってストレージ アカウント内のデータが分類されます。 これらのタグには自動的にインデックスが付けられ、検索可能な多次元インデックスとして公開されるため、データを簡単に見つけることができます。 この記事では、BLOB インデックス タグを使用してデータを設定、取得、および検索する方法について説明します。
階層型名前空間が有効になっているストレージ アカウントでは、BLOB インデックス タグはサポートされていません。 BLOB インデックス タグ機能と既知の問題および制限について詳しくは、「BLOB インデックス タグを使用して Azure BLOB データを管理および検索する」を参照してください。
タグを設定する
次のいずれかのメカニズムを使用してコードが BLOB データへのアクセスを認可されている場合は、インデックス タグを設定できます。
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write アクションを含む Azure RBAC ロールが割り当てられているセキュリティ プリンシパル。 ストレージ BLOB データ所有者は、このアクションを含む組み込みロールです。
- BLOB のタグにアクセスするためのアクセス許可 (
t
アクセス許可) を持つ Shared Access Signature (SAS) - アカウント キー
詳細については、BLOB インデックス タグの設定を参照してください。
次のメソッドを使用してタグを設定できます。
このメソッドで指定したタグは、既存のタグを置き換えます。 古い値を保持する必要がある場合は、ダウンロードしてこのメソッドの呼び出しに含める必要があります。 次の例はタグの設定方法を示しています。
def set_blob_tags(self, blob_service_client: BlobServiceClient, container_name):
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
# Get any existing tags for the blob if they need to be preserved
tags = blob_client.get_blob_tags()
# Add or modify tags
updated_tags = {'Sealed': 'false', 'Content': 'image', 'Date': '2022-01-01'}
tags.update(updated_tags)
blob_client.set_blob_tags(tags)
空の dict
オブジェクトを set_blob_tags
メソッドに渡すことによって、すべてのタグを削除できます。
def clear_blob_tags(self, blob_service_client: BlobServiceClient, container_name):
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
# Pass in empty dict object to clear tags
tags = dict()
blob_client.set_blob_tags(tags)
タグを取得する
次のいずれかのメカニズムを使用してコードが BLOB データへのアクセスを認可されている場合は、インデックス タグを取得できます。
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read アクションを含む Azure RBAC ロールが割り当てられているセキュリティ プリンシパル。 ストレージ BLOB データ所有者は、このアクションを含む組み込みロールです。
- BLOB のタグにアクセスするためのアクセス許可 (
t
アクセス許可) を持つ Shared Access Signature (SAS) - アカウント キー
詳細については、「BLOB インデックス タグの取得と一覧表示」を参照してください。
次のメソッドを使用してタグを取得できます。
次の例は、BLOB のタグを取得して反復処理する方法を示しています。
def get_blob_tags(self, blob_service_client: BlobServiceClient, container_name):
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
tags = blob_client.get_blob_tags()
print("Blob tags: ")
for k, v in tags.items():
print(k, v)
BLOB インデックス タグを使用してデータをフィルター処理および検索する
次のいずれかのメカニズムを使用して、コードが BLOB データへのアクセスを認可されている場合は、インデックス タグを使用してデータを検索し、フィルター処理できます。
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action アクションを含む Azure RBAC ロールが割り当てられているセキュリティ プリンシパル。 ストレージ BLOB データ所有者は、このアクションを含む組み込みロールです。
- タグで BLOB をフィルター処理するアクセス許可 (
f
アクセス許可) を持つ Shared Access Signature (SAS) - アカウント キー
詳細については、「BLOB インデックス タグを使用したデータの検索」を参照してください。
Note
インデックス タグを使用して以前のバージョンを取得することはできません。 以前のバージョンのタグは BLOB インデックス エンジンに渡されません。 詳細については、条件と既知の問題に関するページを参照してください。
次のメソッドを使用してデータを検索できます。
次の例では、画像としてタグ付けされたすべての BLOB を検索して一覧表示します。
def find_blobs_by_tags(self, blob_service_client: BlobServiceClient, container_name):
container_client = blob_service_client.get_container_client(container=container_name)
query = "\"Content\"='image'"
blob_list = container_client.find_blobs_by_tags(filter_expression=query)
print("Blobs tagged as images")
for blob in blob_list:
print(blob.name)
BLOB インデックス タグを非同期に設定する
Python 用 Azure Blob Storage クライアント ライブラリでは、BLOB インデックス タグの非同期操作がサポートされています。 プロジェクトのセットアップ要件の詳細については、「非同期プログラミング」を参照してください。
非同期 API を使用して BLOB インデックス タグを設定するには、次の手順に従います。
次の import ステートメントを追加します。
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
asyncio.run
を使ってプログラムを実行するコードを追加します。 この関数では、この例で渡されたコルーチンmain()
を実行し、asyncio
イベント ループを管理します。 コルーチンは、async/await 構文で宣言されます。 この例のmain()
コルーチンでは、最初にasync with
を使用して最上位のBlobServiceClient
を作成し、次に BLOB インデックス タグを設定するメソッドを呼び出します。 最上位のクライアントのみでasync with
を使う必要があることに注意してください。ここから作成された他のクライアントでは同じ接続プールを共有するためです。async def main(): sample = BlobSamples() # TODO: Replace <storage-account-name> with your actual storage account name account_url = "https://<storage-account-name>.blob.core.windows.net" credential = DefaultAzureCredential() async with BlobServiceClient(account_url, credential=credential) as blob_service_client: await sample.set_blob_tags(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())
BLOB インデックス タグを設定するコードを追加します。 このコードは同期の例と同じですが、
async
キーワードを使用してメソッドが宣言され、get_blob_tags
メソッドとset_blob_tags
メソッドを呼び出すときにawait
キーワードが使用される点が異なります。async def set_blob_tags(self, blob_service_client: BlobServiceClient, container_name): blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt") # Get any existing tags for the blob if they need to be preserved tags = await blob_client.get_blob_tags() # Add or modify tags updated_tags = {'Sealed': 'false', 'Content': 'image', 'Date': '2022-01-01'} tags.update(updated_tags) await blob_client.set_blob_tags(tags)
この基本的なセットアップが整っている場合、async/await 構文を使って、この記事の他の例をコルーチンとして実装できます。
リソース
Python 用 Azure Blob Storage クライアント ライブラリを使用して、インデックス タグを使用したデータの管理と検索を行う方法の詳細については、次のリソースを参照してください。
コード サンプル
REST API の操作
Azure SDK for Python には Azure REST API に基づいて構築されたライブラリが含まれるため、使い慣れた Python パラダイムを通じて REST API 操作を利用できます。 BLOB インデックス タグを管理および使用するためのクライアント ライブラリ メソッドは、次の REST API 操作を使用します。
- BloB タグを取得する (REST API)
- BloB タグを設定する (REST API)
- タグごとに BloB を検索する (REST API)
クライアント ライブラリのリソース
関連項目
関連するコンテンツ
- この記事は、Python の Blob Storage 開発者ガイドの一部です。 詳細については、「Python アプリの構築」にある開発者ガイドの記事の完全な一覧を参照してください。