このページでは、Cloud Healthcare API で DICOM データのストレージ クラスを変更する方法について説明します。
概要
Cloud Healthcare API は次のストレージ クラスを提供します。
- スタンダード
- Nearline
- Coldline
- Archive
これらのストレージ クラスは、Cloud Storage のストレージ クラスに似ています。
次のようなシナリオでは、コスト削減の手段として DICOM オブジェクトのストレージ クラスを変更できます。
- アクセス頻度の低い一連の DICOM 画像を標準ストレージから Nearline Storage または Coldline Storage に移動する。これにより、Standard Storage バケットが解放され、よりアクセス頻度の高い画像を保存できます。
- 患者データを Standard Storage から Archive Storage に移行し、法的理由によって残しておく必要があるデータをアーカイブする。Archive Storage は、耐久性に優れた最低コストのストレージ クラスです。
DICOM ストレージ クラスを変更するメソッド
デフォルトでは、DICOM インスタンスに Standard Storage クラスがあります。ストレージ クラスは、次の方法で変更できます。
import
メソッド:blobStorageSettings
フィールドを使用して Cloud Storage バケットから DICOM インスタンスをインポートするときにストレージ クラスを設定します。storeInstances
メソッド: ローカルパスから DICOM インスタンスを保存するときにストレージ クラスを設定しますsetBlobStorageSettings
メソッド: インスタンス、シリーズ、またはスタディレベルの DICOM ストアでの DICOM インスタンスのストレージ クラスを変更します
準備
Cloud Healthcare API で 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
: スタディ インスタンスの一意の IDSERIES_INSTANCE_UID
: シリーズ インスタンスの一意の識別子INSTANCE_UID
: インスタンスの一意の識別子STORAGE_CLASS
:STANDARD
、NEARLINE
、COLDLINE
、ARCHIVE
の DICOM ストア内の DICOM オブジェクトのストレージ クラス
JSON 本文のリクエスト:
{ "blobStorageSettings": { "blob_storage_class": "STORAGE_CLASS" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "blobStorageSettings": { "blob_storage_class": "STORAGE_CLASS" } } 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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instance/INSTANCE_UID:setBlobStorageSettings"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "blobStorageSettings": { "blob_storage_class": "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" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instance/INSTANCE_UID:setBlobStorageSettings" | Select-Object -Expand Content - 長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DATASET_ID: DICOM ストアの親データセット
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
シリーズ レベル
シリーズレベルで DICOM インスタンスのストレージ クラスを変更するには、次の手順を行います。
REST
projects.locations.datasets.dicomStores.studies.series.setBlobStorageSettings
メソッドを使用します。
- シリーズレベルで DICOM インスタンスのストレージ クラスを変更します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの IDSTUDY_INSTANCE_UID
: スタディ インスタンスの一意の IDSERIES_INSTANCE_UID
: シリーズ インスタンスの一意の識別子STORAGE_CLASS
:STANDARD
、NEARLINE
、COLDLINE
、ARCHIVE
の DICOM ストア内の DICOM オブジェクトのストレージ クラス
JSON 本文のリクエスト:
{ "blobStorageSettings": { "blob_storage_class": "STORAGE_CLASS" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "blobStorageSettings": { "blob_storage_class": "STORAGE_CLASS" } } 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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID:setBlobStorageSettings"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "blobStorageSettings": { "blob_storage_class": "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" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID:setBlobStorageSettings" | Select-Object -Expand Content - 長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DATASET_ID: DICOM ストアの親データセット
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
スタディレベル
スタディレベルで DICOM インスタンスのストレージ クラスを変更するには、次の手順を行います。
REST
projects.locations.datasets.dicomStores.studies.setBlobStorageSettings
メソッドを使用します。
- スタディレベルで DICOM インスタンスのストレージ クラスを変更します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの IDSTUDY_INSTANCE_UID
: スタディ インスタンスの一意の IDSTORAGE_CLASS
:STANDARD
、NEARLINE
、COLDLINE
、ARCHIVE
の DICOM ストア内の DICOM オブジェクトのストレージ クラス
JSON 本文のリクエスト:
{ "blobStorageSettings": { "blob_storage_class": "STORAGE_CLASS" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "blobStorageSettings": { "blob_storage_class": "STORAGE_CLASS" } } 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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID:setBlobStorageSettings"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "blobStorageSettings": { "blob_storage_class": "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" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID:setBlobStorageSettings" | Select-Object -Expand Content - 長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DATASET_ID: DICOM ストアの親データセット
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
フィルタを使用する
次のセクションでは、フィルタ ファイルを使用して特定のファイルをフィルタし、スタディ、シリーズ、またはインスタンス レベルでストレージ クラスを変更する方法について説明します。
フィルタ ファイルが保存されているバケットにアクセスできる Healthcare サービス エージェントのサービス アカウントに、Storage オブジェクト閲覧者のロールを追加する必要があります。
フィルタ ファイルを構成する
フィルタ ファイルを使用して、ストレージ クラスを変更する必要がある 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、インスタンス UID にクエリを実行します。
たとえば、DICOM メタデータを BigQuery にエクスポートした後、次のクエリを実行してスタディ UID、シリーズ UID、インスタンス UID を連結し、フィルタ ファイル形式の要件と一致させます。
SELECT CONCAT ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID) FROM [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
(省略可)クエリが最大レスポンス サイズを超える大きな結果セットを返す場合は、BigQuery でクエリ結果を新しい宛先テーブルに保存します。
クエリ結果をファイルに保存し、Cloud Storage にエクスポートします。手順 2 でクエリ結果を新しい宛先テーブルに保存した場合は、テーブルデータのエクスポートを参照して、テーブルのコンテンツを Cloud Storage にエクスポートします。
必要に応じて、エクスポートしたファイルを編集し、フィルタ ファイルとして使用します。Cloud Storage 内のフィルタ ファイルの場所は、
setBlobStorageSettings
メソッドでは必須です。
フィルタ ファイルを手動で作成する
カスタム コンテンツを含むフィルタ ファイルを作成し、Cloud Storage バケットにアップロードするには、次の手順を行います。
ローカルマシンでストレージ クラスを変更する必要があるインスタンスのリストを含むフィルタ ファイルを作成します。フィルタ ファイルを構成するで説明されている形式を使用します。
フィルタのテキスト ファイルを Cloud Storage のロケーションにアップロードします。
gsutil cp PATH_TO_FILTER_FILE/FILTER_FILE_NAME.txt gs://BUCKET/DIRECTORY
次のように置き換えます。
PATH_TO_FILTER_FILE
: ローカルマシン上のフィルタ ファイルのパスFILTER_FILE_NAME
: フィルタ ファイルの名前BUCKET/DIRECTORY
: Cloud Storage のロケーションのパス
例:
gsutil cp my-local-folder/archive-filters.txt gs://my-bucket/my-directory
フィルタ ファイルを渡す
REST
projects.locations.datasets.dicomStores.studies.setBlobStorageSettings
メソッドを使用して、フィルタ ファイル内のすべてのインスタンスのストレージ クラスを DICOM ストアレベルで変更します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの IDSTORAGE_CLASS
:STANDARD
、NEARLINE
、COLDLINE
、ARCHIVE
の DICOM ストア内の DICOM オブジェクトのストレージ クラスBUCKET/DIRECTORY
JSON 本文のリクエスト:
{ "filter_config": { "resource_paths_gcs_uri": "gs://BUCKET/DIRECTORY" }, "blobStorageSettings": { "blob_storage_class": "STORAGE_CLASS" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "filter_config": { "resource_paths_gcs_uri": "gs://BUCKET/DIRECTORY" }, "blobStorageSettings": { "blob_storage_class": "STORAGE_CLASS" } } 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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setBlobStorageSettings"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "filter_config": { "resource_paths_gcs_uri": "gs://BUCKET/DIRECTORY" }, "blobStorageSettings": { "blob_storage_class": "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" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setBlobStorageSettings" | Select-Object -Expand Content長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DATASET_ID: DICOM ストアの親データセット
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
DICOM インスタンスのストレージ クラスを確認する
getStorageInfo
メソッドを使用する
以下のサンプルは、DICOM インスタンスのストレージ クラスを表示する方法を示しています。
REST
projects.locations.datasets.dicomStores.dicomWeb.studies.series.instances.getStorageInfo
メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの IDSTUDY_INSTANCE_UID
: スタディ インスタンスの一意の IDSERIES_INSTANCE_UID
: シリーズ インスタンスの一意の識別子INSTANCE_UID
: インスタンスの一意の識別子
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1beta1/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/v1beta1/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
次のような JSON レスポンスが返されます。
BigQuery でエクスポートされた DICOM メタデータのクエリ
DICOM メタデータを BigQuery にエクスポートして、BigQuery データセットにクエリを実行し、DICOM インスタンスのストレージ クラスを表示することもできます。
たとえば、次のクエリを実行して、BigQuery データセット内のすべてのインスタンスのスタディ インスタンス UID、シリーズ インスタンス UID、インスタンス UID、blob ストレージ サイズ、blob ストレージ クラスを表示できます。
SELECT StudyInstanceUID,SeriesInstanceUID,SOPInstanceUID,BlobStorageSize,StorageClass FROM PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE LIMIT 1000