이 페이지에서는 장기 실행 작업을 사용하여 FHIR 스토어에서 FHIR 리소스를 일괄 삭제하는 방법을 설명합니다.
리소스 유형, 마지막 업데이트 시간과 같은 필터를 기반으로 또는 Cloud Storage 파일에 특정 리소스 ID 목록을 제공하여 단일 작업으로 여러 FHIR 리소스를 삭제할 수 있습니다. 이는 데이터 수명 주기 관리 및 비용 절감에 유용합니다.
시작하기 전에
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가 포함된 하나 이상의 파일의 Cloud Storage 위치로 설정합니다.
입력 파일은 다음 요구사항을 충족해야 합니다.
- 각 줄에는
RESOURCE_TYPE/RESOURCE_ID형식의 리소스가 하나씩 포함됩니다(예: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: 삭제할 리소스를RESOURCE_TYPE/RESOURCE_ID형식으로 나열하는 파일 또는 와일드 카드 패턴의 Cloud Storage 위치
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 목록이 포함되어 있습니다.
제한사항
일괄 삭제 작업 중에는 참조 무결성이 보장되지 않습니다. 이 작업은 참조 무결성이 필요하지 않거나 작업 후 참조 무결성이 충족되는 것으로 알려진 경우에만 사용하는 것이 좋습니다.