FHIR リソースの一括削除

このページでは、長時間実行オペレーションを使用して FHIR ストアから FHIR リソースを一括削除する方法について説明します。

リソースタイプや最終更新時刻などのフィルタに基づいて、1 回のオペレーションで複数の FHIR リソースを削除できます。また、Cloud Storage ファイルで特定のリソース ID のリストを指定して削除することもできます。これは、データ ライフサイクル管理とコスト削減に役立ちます。

始める前に

FHIR リソースを一括削除する前に、次のことを確認してください。

  • FHIR ストアに対する healthcare.fhirStores.bulkDelete 権限が必要です。
  • gcsDestination を指定する場合は、Cloud Healthcare サービス エージェント サービス アカウントに、宛先バケットに対する roles/storage.objectAdmin ロールが必要です。詳細については、FHIR ストアの Cloud Storage 権限をご覧ください。
  • gcsSource を指定する場合は、Cloud Healthcare サービス エージェント サービス アカウントに、ソースバケットに対する roles/storage.objectViewer ロールが必要です。詳細については、FHIR リソースの一括削除をご覧ください。

FHIR リソースの一括削除

FHIR リソースを一括削除するには、projects.locations.datasets.fhirStores.bulkDelete メソッドを使用します。

このメソッドは、長時間実行オペレーション(LRO)を返します。API 呼び出しから返されたオペレーション名を使用して、LRO のステータスを追跡できます。

次のサンプルは、特定のタイムスタンプより前に最後に更新された FHIR ストア内のすべての Observation リソースと Encounter リソースを一括削除する POST リクエストを行う方法を示しています。

REST

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

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所
  • DATASET_ID: FHIR ストアの親データセット
  • FHIR_STORE_ID: FHIR ストア ID

リクエストの本文(JSON):

{
  "type": "Observation,Encounter",
  "versionConfig": "ALL",
  "until": "2025-01-01T00:00:00Z",
  "gcsDestination": {
    "uriPrefix": "gs://BUCKET/DIRECTORY"
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  "type": "Observation,Encounter",
  "versionConfig": "ALL",
  "until": "2025-01-01T00:00:00Z",
  "gcsDestination": {
    "uriPrefix": "gs://BUCKET/DIRECTORY"
  }
}
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/fhirStores/FHIR_STORE_ID:bulkDelete"

PowerShell

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  "type": "Observation,Encounter",
  "versionConfig": "ALL",
  "until": "2025-01-01T00:00:00Z",
  "gcsDestination": {
    "uriPrefix": "gs://BUCKET/DIRECTORY"
  }
}
'@  | 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/fhirStores/FHIR_STORE_ID:bulkDelete" | Select-Object -Expand Content
次のとおり出力されます。レスポンスには、長時間実行オペレーションの識別子が含まれます。OPERATION_IDの値をメモします。この値は次の手順で必要になります。

リソース ID による FHIR リソースの一括削除

特定の FHIR リソースのリストを削除するには、gcsSource.uri フィールドを、削除するリソース ID を含む 1 つ以上のファイルの Cloud Storage の場所に設定します。

入力ファイルは次の要件を満たしている必要があります。

  • 各行には、RESOURCE_TYPE/RESOURCE_ID 形式のリソースが 1 つ含まれています(例: Patient/8af1cf10-0fec-4bb3-bde1-77f56a3d8281)。リソースタイプのない未加工リソース ID はサポートされていません。
  • URI は、gs://BUCKET/ids.txt などの単一のファイル、または gs://BUCKET/DIRECTORY/*.ndjson などのワイルドカード パターンを指している必要があります。URI には、/ で終わるバケットまたはディレクトリを指定できません。

次の内容は、有効な入力ファイルの例です。

Patient/8af1cf10-0fec-4bb3-bde1-77f56a3d8281
Observation/2c9d4a3e-6b1f-4e2a-9f0d-1a2b3c4d5e6f
Encounter/7f3e2d1c-0b9a-4c8d-8e7f-6a5b4c3d2e1f

次の動作に注意してください。

  • gcsSource フィールドは、type フィルタまたは until フィルタと組み合わせて使用することはできません。gcsSource をいずれかのフィルタとともに指定すると、リクエストは失敗します。
  • gcsSource は versionConfig および gcsDestination とともに使用できます。
  • 空白行は無視されます。RESOURCE_TYPE/RESOURCE_ID 形式に一致しない行や、サポートされていないリソースタイプを含む行はスキップされ、オペレーションが続行されます。
  • FHIR ストアに存在しないリソース ID はスキップされます。
  • オペレーションが完了するまで、入力ファイルを変更または削除しないでください。

次のサンプルは、Cloud Storage ファイルにリストされている FHIR リソースを一括削除する POST リクエストを行う方法を示しています。

REST

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

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所
  • DATASET_ID: FHIR ストアの親データセット
  • FHIR_STORE_ID: FHIR ストア ID
  • BUCKET/PATH_TO_IDS_FILE: 削除するリソースを一覧表示するファイルの Cloud Storage のロケーションまたはワイルドカード パターン。形式は RESOURCE_TYPE/RESOURCE_ID です。

リクエストの本文(JSON):

{
  "versionConfig": "ALL",
  "gcsSource": {
    "uri": "gs://BUCKET/PATH_TO_IDS_FILE"
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  "versionConfig": "ALL",
  "gcsSource": {
    "uri": "gs://BUCKET/PATH_TO_IDS_FILE"
  }
}
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/fhirStores/FHIR_STORE_ID:bulkDelete"

PowerShell

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  "versionConfig": "ALL",
  "gcsSource": {
    "uri": "gs://BUCKET/PATH_TO_IDS_FILE"
  }
}
'@  | 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/fhirStores/FHIR_STORE_ID:bulkDelete" | Select-Object -Expand Content
次のとおり出力されます。レスポンスには、長時間実行オペレーションの識別子が含まれます。OPERATION_IDの値をメモします。この値は次の手順で必要になります。

LRO のステータスを表示する

一括削除オペレーションのステータスを表示するには、bulkDelete 呼び出しから返されたオペレーション名を使用して operations.get メソッドを使用します。

REST

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

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所
  • DATASET_ID: FHIR ストアの親データセット
  • OPERATION_ID: 長時間実行オペレーションから返された ID。

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1alpha2/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/v1alpha2/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
リクエストが成功すると、サーバーはオペレーションのステータスを含む JSON 形式のレスポンスを返します。

削除されたリソースの追跡

一括削除オペレーションが完了すると、gcsDestination が指定されている場合は、Cloud Storage に概要ファイルが生成されます。このファイルには、オペレーション中に削除された現在のバージョンのリソースのリソース ID のリストが含まれています。

制限事項

一括削除オペレーション中は、参照整合性は保証されません。このオペレーションは、参照整合性が不要な場合、またはオペレーション後に参照整合性が満たされることがわかっている場合にのみ使用することをおすすめします。