このページでは、長時間実行オペレーションを使用して 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 プロジェクトの IDLOCATION: データセットの場所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
リソース 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 プロジェクトの IDLOCATION: データセットの場所DATASET_ID: FHIR ストアの親データセットFHIR_STORE_ID: FHIR ストア IDBUCKET/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
LRO のステータスを表示する
一括削除オペレーションのステータスを表示するには、bulkDelete 呼び出しから返されたオペレーション名を使用して operations.get メソッドを使用します。
REST
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID: Google Cloud プロジェクトの IDLOCATION: データセットの場所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
削除されたリソースの追跡
一括削除オペレーションが完了すると、gcsDestination が指定されている場合は、Cloud Storage に概要ファイルが生成されます。このファイルには、オペレーション中に削除された現在のバージョンのリソースのリソース ID のリストが含まれています。
制限事項
一括削除オペレーション中は、参照整合性は保証されません。このオペレーションは、参照整合性が不要な場合、またはオペレーション後に参照整合性が満たされることがわかっている場合にのみ使用することをおすすめします。