Supprimer des ressources FHIR de manière groupée

Cette page explique comment supprimer des ressources FHIR d'un store FHIR de manière groupée à l'aide d'une opération de longue durée.

Vous pouvez supprimer plusieurs ressources FHIR en une seule opération en fonction de filtres tels que le type de ressource et la date de dernière modification, ou en fournissant une liste d'ID de ressources spécifiques dans un fichier Cloud Storage. Cela est utile pour la gestion du cycle de vie des données et les économies de coûts.

Avant de commencer

Avant de pouvoir supprimer des ressources FHIR de manière groupée, assurez-vous des points suivants :

  • Vous devez disposer de l'autorisation healthcare.fhirStores.bulkDelete sur le magasin FHIR.
  • Si vous spécifiez un gcsDestination, le compte de service Agent de service Cloud Healthcare doit disposer du rôle roles/storage.objectAdmin sur le bucket de destination. Pour en savoir plus, consultez Autorisations Cloud Storage pour les magasins FHIR.
  • Si vous spécifiez un gcsSource, le compte de service Agent de service Cloud Healthcare doit disposer du rôle roles/storage.objectViewer sur le bucket source. Pour en savoir plus, consultez Supprimer des ressources FHIR de manière groupée.

Supprimer des ressources FHIR de manière groupée

Pour supprimer des ressources FHIR de manière groupée, utilisez la méthode projects.locations.datasets.fhirStores.bulkDelete.

Cette méthode renvoie une opération de longue durée (LRO). Vous pouvez suivre l'état de l'opération de longue durée à l'aide du nom d'opération renvoyé par l'appel d'API.

L'exemple suivant montre comment effectuer une requête POST pour supprimer de manière groupée toutes les ressources Observation et Encounter d'un magasin FHIR qui ont été mises à jour pour la dernière fois avant un code temporel spécifique.

REST

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données
  • DATASET_ID : ensemble de données parent du magasin FHIR.
  • FHIR_STORE_ID : ID du magasin FHIR.

Corps JSON de la requête :

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

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

Exécutez ensuite la commande suivante pour envoyer votre requête 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

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

Exécutez ensuite la commande suivante pour envoyer votre requête 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
Le résultat est le suivant. La réponse contient un identifiant pour une opération de longue durée. Notez la valeur de OPERATION_ID. Vous aurez besoin de cette valeur à l'étape suivante.

Supprimer des ressources FHIR par ID de ressource

Pour supprimer une liste spécifique de ressources FHIR, définissez le champ gcsSource.uri sur l'emplacement Cloud Storage d'un ou de plusieurs fichiers contenant les ID de ressources à supprimer.

Les fichiers d'entrée doivent répondre aux exigences suivantes :

  • Chaque ligne contient une ressource au format RESOURCE_TYPE/RESOURCE_ID, par exemple Patient/8af1cf10-0fec-4bb3-bde1-77f56a3d8281. Les ID de ressources bruts sans type de ressource ne sont pas acceptés.
  • L'URI doit pointer vers un seul fichier, tel que gs://BUCKET/ids.txt, ou vers un modèle générique, tel que gs://BUCKET/DIRECTORY/*.ndjson. L'URI ne peut pas être un bucket ni un répertoire se terminant par /.

Voici un exemple de fichier d'entrée valide :

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

Notez le comportement suivant :

  • Le champ gcsSource ne peut pas être utilisé avec les filtres type ou until. Si vous spécifiez gcsSource avec l'un des filtres, la requête échoue.
  • Vous pouvez utiliser gcsSource avec versionConfig et gcsDestination.
  • Les lignes vides sont ignorées. Les lignes qui ne correspondent pas au format RESOURCE_TYPE/RESOURCE_ID ou qui contiennent un type de ressource non compatible sont ignorées, et l'opération se poursuit.
  • Les ID de ressources qui n'existent pas dans le store FHIR sont ignorés.
  • Ne modifiez ni ne supprimez les fichiers d'entrée tant que l'opération n'est pas terminée.

L'exemple suivant montre comment envoyer une requête POST pour supprimer de manière groupée les ressources FHIR listées dans un fichier Cloud Storage.

REST

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données
  • DATASET_ID : ensemble de données parent du magasin FHIR.
  • FHIR_STORE_ID : ID du magasin FHIR.
  • BUCKET/PATH_TO_IDS_FILE : emplacement Cloud Storage du fichier ou modèle générique listant les ressources à supprimer au format RESOURCE_TYPE/RESOURCE_ID

Corps JSON de la requête :

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

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

Exécutez ensuite la commande suivante pour envoyer votre requête 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

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

Exécutez ensuite la commande suivante pour envoyer votre requête 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
Le résultat est le suivant. La réponse contient un identifiant pour une opération de longue durée. Notez la valeur de OPERATION_ID. Vous aurez besoin de cette valeur à l'étape suivante.

Afficher l'état de l'opération de longue durée

Pour afficher l'état de l'opération de suppression groupée, utilisez la méthode operations.get avec le nom d'opération renvoyé par l'appel bulkDelete.

REST

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données
  • DATASET_ID : ensemble de données parent du magasin FHIR.
  • OPERATION_ID : ID renvoyé par l'opération de longue durée

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Exécutez la commande suivante :

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

Exécutez la commande suivante :

$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
Si la requête aboutit, le serveur renvoie une réponse avec l'état de l'opération au format JSON :

Suivre les ressources supprimées

Une fois l'opération de suppression groupée terminée, un fichier récapitulatif est généré dans Cloud Storage si un gcsDestination a été spécifié. Ce fichier contient la liste des ID de ressources de la version actuelle qui ont été supprimées lors de l'opération.

Limites

L'intégrité référentielle n'est pas garantie lors d'une opération de suppression groupée. Il est recommandé d'utiliser cette opération uniquement lorsque l'intégrité référentielle n'est pas requise ou est connue pour être satisfaite après l'opération.