このページでは、さまざまなストレージ クラスを使用して Cloud Healthcare API で DICOM データを管理する方法について説明します。適切なストレージ クラスを選択すると、コストを削減し、データの保持に関する規制要件を満たすことができます。
このページは、DICOM と Cloud Healthcare API に精通している技術ユーザーを対象としています。
概要
DICOM ストレージ クラスは Cloud Storage ストレージ クラスと同様に機能し、データへのアクセス頻度と保存期間に応じて異なるコストとパフォーマンスの特性を提供します。各ストレージ クラスの詳細については、クラスの説明をご覧ください。
オブジェクトにアクセスする頻度やオブジェクトの保持期間に応じて、DICOM オブジェクトのストレージ クラスを変更できます。次に例を示します。
- アクセス頻度の低い DICOM 画像を Standard Storage から Nearline Storage または Coldline Storage に移動すると、請求額を節約できます。
- 法的理由で保持する必要がある患者データを、最も低コストで耐久性の高いストレージ クラスである Archive Storage に移動できます。
使用可能な DICOM ストレージ クラス
DICOM オブジェクトには、次のストレージ クラスを使用できます。
- Standard(デフォルト)
- Nearline
- Coldline
- アーカイブ
ストレージ クラスの料金
各ストレージ クラスには独自の料金体系があります。DICOM オブジェクトのストレージ クラスを変更すると、請求額に影響する可能性があります。詳しくは以下をご覧ください。
個々の DICOM オブジェクトのストレージ クラスを変更する
DICOM オブジェクトのストレージ クラスは、スタディ、シリーズ、インスタンス レベルで変更できます。
次のサンプルは、DICOM インスタンスのストレージ クラスを変更する方法を示しています。
REST
projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings
メソッドを使用して、DICOM インスタンスのストレージ クラスを変更します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの IDSTUDY_INSTANCE_UID
: スタディ インスタンスの一意の識別子SERIES_INSTANCE_UID
: シリーズ インスタンスの一意の識別子INSTANCE_UID
: インスタンスの一意の識別子STORAGE_CLASS
: DICOM インスタンスのストレージ クラス。STANDARD
、NEARLINE
、COLDLINE
、ARCHIVE
のいずれかです。
リクエストの本文(JSON):
{ "blobStorageSettings": { "blobStorageClass": "STORAGE_CLASS" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "blobStorageSettings": { "blobStorageClass": "STORAGE_CLASS" } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:setBlobStorageSettings"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "blobStorageSettings": { "blobStorageClass": "STORAGE_CLASS" } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:setBlobStorageSettings" | Select-Object -Expand ContentAPI Explorer
リクエスト本文をコピーして、メソッドのリファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。このツールにリクエスト本文を貼り付け、その他の必須フィールドに入力して、[Execute] をクリックします。
OPERATION_ID
の値をメモします。この値は次の手順で必要になります。projects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットOPERATION_ID
: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content"done": true
が含まれている場合、LRO は終了しています。
フィルタ ファイルを使用して複数のオブジェクトのストレージ クラスを変更する
以降のセクションでは、フィルタ ファイルを作成して使用し、フィルタ条件に基づいて DICOM オブジェクトのストレージ クラスを変更する方法について説明します。
フィルタ ファイルの要件
- フィルタ ファイルの各行はスタディ、シリーズ、またはインスタンスを定義し、
/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID
の形式を使用します。 - フィルタを適用するレベルを指定するために、行を切り捨てることができます。たとえば、
/studies/STUDY_INSTANCE_UID
を指定してスタディ全体を選択したり、/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID
を指定してシリーズ全体を選択したりできます。
次のフィルタ ファイルについて考えてみましょう。
/studies/1.123.456.789 /studies/1.666.333.111/series/123.456 /studies/1.666.333.111/series/567.890 /studies/1.888.999.222/series/123.456/instances/111 /studies/1.888.999.222/series/123.456/instances/222 /studies/1.888.999.222/series/123.456/instances/333
このフィルタ ファイルの例は、次に適用されます。
- スタディ インスタンス UID が
1.123.456.789
のスタディ全体 - スタディ
1.666.333.111
内のシリーズ インスタンス UID が123.456
と567.890
の 2 つの別々のシリーズ - スタディ
1.888.999.222
とシリーズ123.456
でインスタンス ID が111
、222
、333
の独立した 3 つのインスタンス
BigQuery を使用してフィルタ ファイルを作成する
BigQuery を使用してフィルタ ファイルを作成するには、まず DICOM ストアのメタデータを BigQuery にエクスポートする必要があります。エクスポートされたメタデータには、DICOM ストア内の DICOM データのスタディ、シリーズ、インスタンスの UID が表示されます。
メタデータをエクスポートしたら、次の操作を行います。
クエリを実行して、フィルタ ファイルに追加するスタディ、シリーズ、インスタンスの UID を返します。
たとえば、次のクエリは、スタディ UID、シリーズ UID、インスタンス UID を連結して、フィルタ ファイル形式の要件を満たす方法を示しています。
SELECT CONCAT ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID) FROM [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
(省略可)クエリが最大レスポンス サイズを超える大きな結果セットを返す場合は、BigQuery でクエリ結果を新しい宛先テーブルに保存します。
クエリ結果をファイルに保存し、Cloud Storage にエクスポートします。手順 2 でクエリ結果を新しい宛先テーブルに保存した場合は、テーブルデータのエクスポートでテーブルの内容を Cloud Storage にエクスポートします。
必要に応じてエクスポートしたファイルを編集し、複数の DICOM オブジェクトのストレージ クラスを変更するリクエストに含めます。
フィルタ ファイルを手動で作成する
フィルタ ファイルを手動で作成する手順は次のとおりです。
- フィルタする DICOM オブジェクトを含むフィルタ ファイルを作成します。
- フィルタ ファイルを Cloud Storage にアップロードします。手順については、ファイル システムからオブジェクトをアップロードするをご覧ください。
フィルタ ファイルを使用する
次のサンプルは、DICOM オブジェクトのストレージ クラスを変更するときにフィルタ ファイルを適用する方法を示しています。
REST
projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings
メソッドを使用して、フィルタ ファイル内の DICOM インスタンスのストレージ クラスを変更します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの IDSTORAGE_CLASS
: DICOM オブジェクトのストレージ クラス。STANDARD
、NEARLINE
、COLDLINE
、ARCHIVE
のいずれかです。CLOUD_STORAGE_BUCKET
: フィルタ ファイルを含む Cloud Storage バケットの名前FILTER_FILE_PATH
: Cloud Storage バケット内のフィルタ ファイルの完全修飾 URI
リクエストの本文(JSON):
{ "blobStorageSettings": { "blobStorageClass": "STORAGE_CLASS" }, "filterConfig": { "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "blobStorageSettings": { "blobStorageClass": "STORAGE_CLASS" }, "filterConfig": { "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH" } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setBlobStorageSettings"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "blobStorageSettings": { "blobStorageClass": "STORAGE_CLASS" }, "filterConfig": { "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH" } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setBlobStorageSettings" | Select-Object -Expand ContentOPERATION_ID
の値をメモします。この値は次の手順で必要になります。projects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットOPERATION_ID
: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content"done": true
が含まれている場合、LRO は終了しています。
DICOM オブジェクトのストレージ クラスを表示する
DICOM オブジェクトのストレージ クラスは、スタディ、シリーズ、インスタンスのレベルで表示できます。
以降のセクションでは、DICOM インスタンスのストレージ クラスを表示する方法について説明します。
DICOM オブジェクトのストレージ クラス情報を取得する
次のサンプルは、instances.getStorageInfo
メソッドを使用して DICOM オブジェクトのストレージ クラスを表示する方法を示しています。
REST
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの IDSTUDY_INSTANCE_UID
: スタディ インスタンスの一意の識別子SERIES_INSTANCE_UID
: シリーズ インスタンスの一意の識別子INSTANCE_UID
: インスタンスの一意の識別子
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:getStorageInfo"
PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:getStorageInfo" | Select-Object -Expand Content
API Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
BigQuery でエクスポートされた DICOM メタデータをクエリする
DICOM メタデータを BigQuery にエクスポートし、クエリを実行して、エクスポートされた DICOM オブジェクトのストレージ クラスを表示できます。
次のクエリは、BigQuery データセットから最大 1,000 個の DICOM インスタンスのスタディ インスタンス UID、シリーズ インスタンス UID、インスタンス UID、ストレージ サイズ、ストレージ クラスを取得する方法を示しています。
SELECT StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID, BlobStorageSize, StorageClass FROM PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE LIMIT 1000
以下を置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDBIGQUERY_DATASET
: エクスポートされた DICOM メタデータを含むテーブルの親 BigQuery データセットBIGQUERY_TABLE
: エクスポートされた DICOM メタデータを含む BigQuery テーブル