Eliminazione collettiva di risorse FHIR

Questa pagina spiega come eliminare in blocco le risorse FHIR da un FHIR store utilizzando un'operazione a lunga esecuzione.

Puoi eliminare più risorse FHIR in una singola operazione in base a filtri come il tipo di risorsa e l'ora dell'ultimo aggiornamento oppure fornendo un elenco di ID risorsa specifici in un file Cloud Storage. Questa funzionalità è utile per la gestione del ciclo di vita dei dati e il risparmio sui costi.

Prima di iniziare

Prima di poter eliminare in blocco le risorse FHIR, assicurati di quanto segue:

  • Devi disporre dell'autorizzazione healthcare.fhirStores.bulkDelete sul datastore FHIR.
  • Se specifichi un gcsDestination, il account di servizio Service agent Cloud Healthcare deve disporre del ruolo roles/storage.objectAdmin sul bucket di destinazione. Per maggiori informazioni, consulta Autorizzazioni Cloud Storage per l'archivio FHIR.
  • Se specifichi un gcsSource, il account di servizio Service agent Cloud Healthcare deve disporre del ruolo roles/storage.objectViewer sul bucket di origine. Per saperne di più, consulta Eliminazione collettiva delle risorse FHIR.

Eliminazione collettiva delle risorse FHIR

Per eliminare in blocco le risorse FHIR, utilizza il metodo projects.locations.datasets.fhirStores.bulkDelete.

Questo metodo restituisce un'operazione a lunga esecuzione (LRO). Puoi monitorare lo stato dell'operazione a lunga esecuzione utilizzando il nome dell'operazione restituito dalla chiamata API.

L'esempio seguente mostra come effettuare una richiesta POST per eliminare collettivamente tutte le risorse Observation e Encounter in un datastore FHIR che sono state aggiornate l'ultima volta prima di un timestamp specifico.

REST

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • PROJECT_ID: l'ID del tuo Google Cloud progetto
  • LOCATION: la posizione del set di dati
  • DATASET_ID: il set di dati padre dell'archivio FHIR
  • FHIR_STORE_ID: l'ID del datastore FHIR

Corpo JSON della richiesta:

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

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:

cat > request.json << 'EOF'
{
  "type": "Observation,Encounter",
  "versionConfig": "ALL",
  "until": "2025-01-01T00:00:00Z",
  "gcsDestination": {
    "uriPrefix": "gs://BUCKET/DIRECTORY"
  }
}
EOF

Quindi esegui questo comando per inviare la richiesta 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

Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:

@'
{
  "type": "Observation,Encounter",
  "versionConfig": "ALL",
  "until": "2025-01-01T00:00:00Z",
  "gcsDestination": {
    "uriPrefix": "gs://BUCKET/DIRECTORY"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Quindi esegui questo comando per inviare la richiesta 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
L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Prendi nota del valore di OPERATION_ID. Ti servirà nel passaggio successivo.

Eliminazione collettiva di risorse FHIR per ID risorsa

Per eliminare un elenco specifico di risorse FHIR, imposta il campo gcsSource.uri sul percorso Cloud Storage di uno o più file contenenti gli ID risorsa da eliminare.

I file di input devono soddisfare i seguenti requisiti:

  • Ogni riga contiene una risorsa nel formato RESOURCE_TYPE/RESOURCE_ID, ad esempio Patient/8af1cf10-0fec-4bb3-bde1-77f56a3d8281. Gli ID risorsa non elaborati senza un tipo di risorsa non sono supportati.
  • L'URI deve rimandare a un singolo file, ad esempio gs://BUCKET/ids.txt, o a un pattern jolly, ad esempio gs://BUCKET/DIRECTORY/*.ndjson. L'URI non può essere un bucket o una directory che termina con /.

I seguenti contenuti sono un esempio di file di input valido:

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

Tieni presente quanto segue:

  • Il campo gcsSource non può essere utilizzato insieme ai filtri type o until. Se specifichi gcsSource insieme a uno dei due filtri, la richiesta non va a buon fine.
  • Puoi utilizzare gcsSource con versionConfig e gcsDestination.
  • Le righe vuote vengono ignorate. Le righe che non corrispondono al formato RESOURCE_TYPE/RESOURCE_ID o che contengono un tipo di risorsa non supportato vengono ignorate e l'operazione continua.
  • Gli ID risorsa che non esistono nel datastore FHIR vengono ignorati.
  • Non modificare o eliminare i file di input finché l'operazione non è completata.

Il seguente esempio mostra come effettuare una richiesta POST per eliminare in blocco le risorse FHIR elencate in un file Cloud Storage.

REST

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • PROJECT_ID: l'ID del tuo Google Cloud progetto
  • LOCATION: la posizione del set di dati
  • DATASET_ID: il set di dati padre dell'archivio FHIR
  • FHIR_STORE_ID: l'ID del datastore FHIR
  • BUCKET/PATH_TO_IDS_FILE: il percorso di Cloud Storage del file o il pattern jolly che elenca le risorse da eliminare nel formato RESOURCE_TYPE/RESOURCE_ID

Corpo JSON della richiesta:

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

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:

cat > request.json << 'EOF'
{
  "versionConfig": "ALL",
  "gcsSource": {
    "uri": "gs://BUCKET/PATH_TO_IDS_FILE"
  }
}
EOF

Quindi esegui questo comando per inviare la richiesta 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

Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:

@'
{
  "versionConfig": "ALL",
  "gcsSource": {
    "uri": "gs://BUCKET/PATH_TO_IDS_FILE"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Quindi esegui questo comando per inviare la richiesta 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
L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Prendi nota del valore di OPERATION_ID. Ti servirà nel passaggio successivo.

Visualizzare lo stato dell'LRO

Per visualizzare lo stato dell'operazione di eliminazione collettiva, utilizza il metodo operations.get con il nome dell'operazione restituito dalla chiamata bulkDelete.

REST

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • PROJECT_ID: l'ID del tuo Google Cloud progetto
  • LOCATION: la posizione del set di dati
  • DATASET_ID: il set di dati padre dell'archivio FHIR
  • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

Per inviare la richiesta, scegli una di queste opzioni:

curl

Esegui questo comando:

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

Esegui questo comando:

$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
Se la richiesta va a buon fine, il server restituisce una risposta con lo stato dell'operazione in formato JSON:

Monitoraggio delle risorse eliminate

Al termine dell'operazione di eliminazione collettiva, se è stato specificato un gcsDestination, viene generato un file di riepilogo in Cloud Storage. Questo file contiene un elenco degli ID risorsa per le risorse della versione corrente che sono state eliminate durante l'operazione.

Limitazioni

L'integrità referenziale non è garantita durante un'operazione di eliminazione collettiva. Ti consigliamo di utilizzare questa operazione solo quando l'integrità referenziale non è richiesta o è noto che viene soddisfatta dopo l'operazione.