DICOM ストレージ クラス

このページでは、さまざまなストレージ クラスを使用して 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

  1. projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings メソッドを使用して、DICOM インスタンスのストレージ クラスを変更します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID
    • LOCATION: データセットの場所
    • DATASET_ID: DICOM ストアの親データセット
    • DICOM_STORE_ID: DICOM ストアの ID
    • STUDY_INSTANCE_UID: スタディ インスタンスの一意の識別子
    • SERIES_INSTANCE_UID: シリーズ インスタンスの一意の識別子
    • INSTANCE_UID: インスタンスの一意の識別子
    • STORAGE_CLASS: DICOM インスタンスのストレージ クラス。STANDARDNEARLINECOLDLINEARCHIVE のいずれかです。

    リクエストの本文(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 Content

    API Explorer

    リクエスト本文をコピーして、メソッドのリファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。このツールにリクエスト本文を貼り付け、その他の必須フィールドに入力して、[Execute] をクリックします。

    次のとおり出力されます。レスポンスには、長時間実行オペレーション(LRO)の識別子が含まれます。長時間実行オペレーションは、メソッドの呼び出しが完了するまでに時間がかかる場合に返されます。OPERATION_IDの値をメモします。この値は次の手順で必要になります。

  2. projects.locations.datasets.operations.get メソッドを使用して、長時間実行オペレーションのステータスを取得します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • 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/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.456567.890 の 2 つの別々のシリーズ
  • スタディ 1.888.999.222 とシリーズ 123.456 でインスタンス ID が 111222333 の独立した 3 つのインスタンス

BigQuery を使用してフィルタ ファイルを作成する

BigQuery を使用してフィルタ ファイルを作成するには、まず DICOM ストアのメタデータを BigQuery にエクスポートする必要があります。エクスポートされたメタデータには、DICOM ストア内の DICOM データのスタディ、シリーズ、インスタンスの UID が表示されます。

メタデータをエクスポートしたら、次の操作を行います。

  1. クエリを実行して、フィルタ ファイルに追加するスタディ、シリーズ、インスタンスの UID を返します。

    たとえば、次のクエリは、スタディ UID、シリーズ UID、インスタンス UID を連結して、フィルタ ファイル形式の要件を満たす方法を示しています。

    SELECT CONCAT
        ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
        [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
  2. (省略可)クエリが最大レスポンス サイズを超える大きな結果セットを返す場合は、BigQuery でクエリ結果を新しい宛先テーブルに保存します。

  3. クエリ結果をファイルに保存し、Cloud Storage にエクスポートします。手順 2 でクエリ結果を新しい宛先テーブルに保存した場合は、テーブルデータのエクスポートでテーブルの内容を Cloud Storage にエクスポートします。

  4. 必要に応じてエクスポートしたファイルを編集し、複数の DICOM オブジェクトのストレージ クラスを変更するリクエストに含めます。

フィルタ ファイルを手動で作成する

フィルタ ファイルを手動で作成する手順は次のとおりです。

  1. フィルタする DICOM オブジェクトを含むフィルタ ファイルを作成します。
  2. フィルタ ファイルを Cloud Storage にアップロードします。手順については、ファイル システムからオブジェクトをアップロードするをご覧ください。

フィルタ ファイルを使用する

次のサンプルは、DICOM オブジェクトのストレージ クラスを変更するときにフィルタ ファイルを適用する方法を示しています。

REST

  1. projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings メソッドを使用して、フィルタ ファイル内の DICOM インスタンスのストレージ クラスを変更します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID
    • LOCATION: データセットの場所
    • DATASET_ID: DICOM ストアの親データセット
    • DICOM_STORE_ID: DICOM ストアの ID
    • STORAGE_CLASS: DICOM オブジェクトのストレージ クラス。STANDARDNEARLINECOLDLINEARCHIVE のいずれかです。
    • 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 Content
    次のとおり出力されます。レスポンスには、長時間実行オペレーション(LRO)の識別子が含まれます。長時間実行オペレーションは、メソッドの呼び出しが完了するまでに時間がかかる場合に返されます。OPERATION_IDの値をメモします。この値は次の手順で必要になります。

  2. projects.locations.datasets.operations.get メソッドを使用して、長時間実行オペレーションのステータスを取得します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • 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/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 プロジェクトの ID
  • LOCATION: データセットの場所
  • DATASET_ID: DICOM ストアの親データセット
  • DICOM_STORE_ID: DICOM ストアの ID
  • STUDY_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 プロジェクトの ID
  • BIGQUERY_DATASET: エクスポートされた DICOM メタデータを含むテーブルの親 BigQuery データセット
  • BIGQUERY_TABLE: エクスポートされた DICOM メタデータを含む BigQuery テーブル