Cette page explique comment utiliser la récupération à un moment précis (PITR) pour récupérer des ressources FHIR dans un store FHIR dans un état au sein de au cours des 21 derniers jours. La récupération à un moment précis vous permet de récupérer supprimer des ressources FHIR.
Avant de commencer
Les requêtes PITR sont classées comme des requêtes d'opération avancée et sont facturées en conséquence. Avant d'utiliser la récupération à un moment précis, consultez les tarifs requêtes d'opération avancée.
Historique des versions des ressources PITR et FHIR
La récupération à un moment précis ne dépend pas de l'historique des versions des ressources FHIR.
Vous pouvez toujours utiliser la récupération à un moment précis si le champ disableResourceVersioning
d'un store FHIR est true
ou si l'historique d'une ressource FHIR
versions ont été supprimées définitivement.
Workflow de récupération
Pour vous assurer qu'une récupération de production s'exécute comme prévu, effectuez d'abord une simulation. La simulation génère un ou plusieurs fichiers contenant les ID et les types des Ressources FHIR à récupérer. Vérifiez l'exactitude des fichiers de sortie avant exécuter à nouveau la récupération en production.
Pour récupérer des ressources spécifiques ou récupérer des ressources en fonction d'un filtrage spécifiez un filtre.
Effectuer une simulation
Avant de récupérer des ressources FHIR en production, effectuez une simulation.
Les exemples suivants montrent comment effectuer une simulation
à l'aide de fhirStores.rollback
.
REST
Récupérez les ressources FHIR.
Pour effectuer une simulation, assurez-vous que
force
estfalse
.Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
PROJECT_ID
: ID de votre projet Google CloudLOCATION
: emplacement de l'ensemble de donnéesDATASET_ID
: ensemble de données parent du magasin FHIR.FHIR_STORE_ID
: ID du magasin FHIR.RECOVERY_TIMESTAMP
: point de récupération au cours des 21 derniers jours. Utilisez le format RFC 3339. Spécifiez l'heure à la seconde et incluez un fuseau horaire, par exemple2015-02-07T13:28:17.239+02:00
ou2017-01-01T00:00:00Z
.CLOUD_STORAGE_BUCKET
: URI complet d'un dossier ou bucket Cloud Storage dans lequel les fichiers de sortie sont écrits
Corps JSON de la requête :
{ "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "false" }
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' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "false" } 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; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:rollback"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 :@' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "false" } '@ | 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; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:rollback" | Select-Object -Expand ContentAPI Explorer
Copiez le corps de la requête et ouvrez la page de référence de la méthode. Le panneau APIs Explorer s'ouvre dans la partie droite de la page. Vous pouvez interagir avec cet outil pour envoyer des requêtes. Collez le corps de la requête dans cet outil, renseignez tous les champs obligatoires, puis cliquez sur Execute (Exécuter).
OPERATION_ID
. Vous en aurez besoin à l'étape suivante.Utilisez la méthode
projects.locations.datasets.operations.get
pour obtenir l'état de l'opération de longue durée.Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
PROJECT_ID
: ID de votre projet Google CloudDATASET_ID
: ID de l'ensemble de donnéesLOCATION
: emplacement de l'ensemble de donnéesOPERATION_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/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
Ouvrez le page de référence de la méthode. Le panneau APIs Explorer s'ouvre dans la partie droite de la page. Vous pouvez interagir avec cet outil pour envoyer des requêtes. Renseignez tous les champs obligatoires, puis cliquez sur Execute (Exécuter).
"done": true
, l'opération de longue durée est terminée.
Afficher les fichiers de sortie de la simulation
Chaque simulation génère un ou plusieurs fichiers contenant les ID et les types du FHIR
ressources à récupérer. Les fichiers sont créés dans un sous-dossier du dossier rollback_resources
de destination
bucket Cloud Storage. Le nom du sous-dossier est l'ID d'opération de longue durée renvoyé dans le
Réponse fhirStores.rollback
. Pour afficher les fichiers et vérifier que la récupération fonctionne
comme prévu, consultez
Affichez les métadonnées d'objets.
Le nombre de fichiers est proportionnel au nombre de ressources FHIR récupérées.
Les noms de fichiers sont au format trial-NUMBER-of-TOTAL_NUMBER.txt
,
où NUMBER
correspond au numéro de fichier et TOTAL_NUMBER
correspond au nombre
total de fichiers.
Schéma du fichier de sortie pour la simulation
Les fichiers de sortie d'une récupération à blanc utilisent le schéma présenté dans la tableau suivant:
RESOURCE_TYPE |
RESOURCE_ID |
TIMESTAMP |
---|---|---|
Type de ressource FHIR. | ID de la ressource FHIR. | Heure à laquelle la ressource FHIR a été créée ou mise à jour dans le store FHIR. |
Récupérer en production
Avant de procéder à la récupération en production, effectuez une simulation et inspectez l'état effectuer une simulation des fichiers de sortie pour vous assurer que la récupération en production s'exécute comme prévu ;
Les exemples suivants montrent comment restaurer des ressources FHIR en production
à l'aide de fhirStores.rollback
.
REST
Récupérez les ressources FHIR.
Assurez-vous que
force
esttrue
.Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
PROJECT_ID
: ID de votre projet Google CloudLOCATION
: emplacement de l'ensemble de donnéesDATASET_ID
: ensemble de données parent du magasin FHIR.FHIR_STORE_ID
: ID du magasin FHIR.RECOVERY_TIMESTAMP
: point de récupération au cours des 21 derniers jours. Utilisez le format RFC 3339. Spécifiez l'heure à la seconde et incluez un fuseau horaire, par exemple2015-02-07T13:28:17.239+02:00
ou2017-01-01T00:00:00Z
.CLOUD_STORAGE_BUCKET
: URI complet d'un dossier ou bucket Cloud Storage dans lequel les fichiers de sortie sont écrits
Corps JSON de la requête :
{ "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "true" }
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' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "true" } 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; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:rollback"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 :@' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "true" } '@ | 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; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:rollback" | Select-Object -Expand ContentAPI Explorer
Copiez le corps de la requête et ouvrez la page de référence de la méthode. Le panneau APIs Explorer s'ouvre dans la partie droite de la page. Vous pouvez interagir avec cet outil pour envoyer des requêtes. Collez le corps de la requête dans cet outil, renseignez tous les champs obligatoires, puis cliquez sur Execute (Exécuter).
OPERATION_ID
. Vous en aurez besoin à l'étape suivante.Utilisez la méthode
projects.locations.datasets.operations.get
pour obtenir l'état de l'opération de longue durée.Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
PROJECT_ID
: ID de votre projet Google CloudDATASET_ID
: ID de l'ensemble de donnéesLOCATION
: emplacement de l'ensemble de donnéesOPERATION_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/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
Ouvrez le page de référence de la méthode. Le panneau APIs Explorer s'ouvre dans la partie droite de la page. Vous pouvez interagir avec cet outil pour envoyer des requêtes. Renseignez tous les champs obligatoires, puis cliquez sur Execute (Exécuter).
"done": true
, l'opération de longue durée est terminée.
Afficher les fichiers de sortie de récupération en production
Une récupération en production génère les fichiers suivants. Les fichiers sont créés dans un
sous-dossier du dossier rollback_resources
de la destination
bucket Cloud Storage. Le nom du sous-dossier est l'ID d'opération de longue durée renvoyé dans le
Réponse fhirStores.rollback
. Pour afficher les fichiers, consultez
Affichez les métadonnées d'objets.
success-NUMBER-of-TOTAL_NUMBER.txt
: contient les ressources FHIR récupérées.fail-NUMBER-of-TOTAL_NUMBER.txt
: contient Ressources FHIR dont la récupération a échoué. Un fichier vide est généré même si il n'y a aucune défaillance.
Dans les noms de fichier, NUMBER
est le numéro de fichier et TOTAL_NUMBER
correspond au nombre
total de fichiers.
Schéma du fichier de sortie de production
Les fichiers de réussite et d'échec d'une récupération en production utilisent les éléments suivants :
du schéma. Les fichiers d'erreur contiennent
ERROR_MESSAGE
.
RESOURCE_TYPE |
RESOURCE_ID |
ROLLBACK_VERSION_ID |
NEW_VERSION_ID |
ERROR_MESSAGE (fichiers d'erreur uniquement) |
---|---|---|---|---|
Type de ressource FHIR. | ID de la ressource FHIR. | ID de la version actuelle de la ressource au moment où la récupération a commencé. | ID de la version actuelle de la ressource après la récupération. Si disableResourceVersioning est défini sur true , ou si la récupération d'une ressource entraîne la suppression de la ressource, ROLLBACK_VERSION_ID et NEW_VERSION_ID sont vides. |
Fichiers d'erreur uniquement. Décrit pourquoi la ressource FHIR déposée pour être récupérée. |
Utiliser des filtres pour récupérer des ressources FHIR spécifiques
Les sections suivantes expliquent comment utiliser des filtres pour récupérer
Ressources FHIR en fonction d'un critère de filtre.
Vous spécifiez les filtres dans l'objet RollbackFhirResourceFilteringFields
lors de l'envoi
une requête fhirStores.rollback
.
Vous pouvez combiner des filtres ou les utiliser individuellement pour différents cas d'utilisation, dont les suivantes:
- Récupérer des ressources FHIR spécifiques après une suppression accidentelle tout en laissant les autres inchangés.
- Restaurer un store FHIR à un état antérieur à une opération d'importation spécifique importé certaines ressources FHIR.
Utiliser un fichier de filtre
Par défaut, la récupération à un moment précis récupère toutes les ressources FHIR d'un store FHIR. Pour récupérer
ressources FHIR spécifiques, spécifier les types de ressources et leurs ID de ressource dans un fichier,
puis importez le fichier
Cloud Storage. Indiquez l'emplacement du fichier dans le fichier
inputGcsObject
.
Pour lire un fichier de filtre à partir de Cloud Storage, vous devez accorder des autorisations à l'agent de service Cloud Healthcare de service géré. Pour en savoir plus, consultez la section Lire des fichiers de filtre de Cloud Storage.
Le fichier de filtre peut avoir n'importe quelle extension. Il doit utiliser le schéma suivant : avec une ressource FHIR par ligne:
FHIR_RESOURCE_TYPE/FHIR_RESOURCE_ID
Par exemple, pour récupérer une ressource patient ayant l'ID 8f25b0ac
et deux
les ressources d'observation avec les ID d507417e90e
et e9950d90e
, à spécifier ;
dans le fichier de filtre:
Patient/8f25b0ac
Observation/d507417e90e
Observation/e9950d90e
Utiliser des fonctions personnalisées
L'API Cloud Healthcare fournit les fonctions de filtrage personnalisées suivantes.
Vous pouvez combiner les fonctions personnalisées
rollbackTime
pour appliquer un filtre supplémentaire.
tag
Détails Syntaxe des fonctions tag("system") = "code"
Description Filtre les ressources FHIR en fonction de l'élément de ressourceMeta.tag
.Arguments system
string
URL qui fait référence à un système de code. Pour en savoir plus, consultez Utiliser des codes dans les ressources.code
string
Valeur qui identifie un concept tel que défini par le système de code. Pour en savoir plus, consultez Utiliser des codes dans les ressources.
extension_value_ts
Détails Syntaxe des fonctions extension_value_ts("url")
Description Filtre les ressources FHIR en fonction de la valeururl
dans un élémentextension
oùurl
est un horodatage Unix. Compatible avec les opérateurs de comparaison suivants:=
!=
<
>
<=
>=
Arguments url
string
URL canonique d'une ressource StructureDefinition qui définit une extension. Par exemple, dans l'élémentextension
suivant,url
correspond àhttp://hl7.org/fhir/StructureDefinition/timezone
:"extension" : [{ "url" : "http://hl7.org/fhir/StructureDefinition/timezone", "valueCode" : "America/New_York" }]
Pour en savoir plus, consultez Définir des extensions.
Filtrer par type de ressource FHIR
Pour filtrer les ressources FHIR
plus généralement en fonction du type de ressource, spécifiez les types de ressources dans
types[]
tableau.
Filtrer par type d'opération
Pour filtrer les ressources FHIR qui ont été modifiées par un CREATE
, un UPDATE
ou
DELETE
transaction,
spécifiez une valeur dans le ChangeType
enum.
Par exemple,
pour ne récupérer que les ressources FHIR qui ont été supprimées, spécifiez le
DELETE
.
Si vous spécifiez CHANGE_TYPE_UNSPECIFIED
,
ALL
,
ou si vous ne spécifiez pas de valeur, toutes les ressources FHIR sont récupérées.
Exclure les récupérations précédentes
Pour exclure les récupérations précédentes lors de la récupération de ressources FHIR, définissez
excludeRollbacks
sur true
. Vous pouvez exclure les récupérations précédentes si le
les récupérations ont fonctionné correctement et
vous ne voulez pas écraser leurs modifications.
Vous pouvez également effectuer plusieurs récupérations dont les codes temporels se chevauchent.
Imaginez le scénario suivant :
- À
1:00
, vous démarrez une récupération avec le code temporel de récupération défini sur0:01
. À2:00
, l'opération de récupération supprime les ressources patientPatient/1
etPatient/2
. dans le store FHIR. L'opération de récupération se termine à3:00
. Quelques jours plus tard, vous exécutez une opération de récupération avec l'horodatage de récupération définie sur
1:00
. Par défaut, l'exécution de l'opération entraîne le résultat suivant:- Recréation incorrecte des ressources patient
Patient/1
etPatient/2
. - Récupération correcte des ressources FHIR créées ou mises à jour après
3:00
.
- Recréation incorrecte des ressources patient
Pour exclure l'opération de récupération initiale qui a supprimé
les ressources patient Patient/1
et Patient/2
, et évitez de les recréer,
définissez excludeRollbacks
sur true
.
Filtrer à l'aide d'ID d'opération de longue durée
Si les ressources FHIR ont été modifiées par une ou plusieurs opérations de longue durée,
vous pouvez spécifier les ID de longue durée dans le champ operationIds
.
pour récupérer les ressources modifiées.
Consultez la section Répertorier les opérations de longue durée. pour découvrir comment répertorier et afficher les ID de longue durée dans un ensemble de données de l'API Cloud Healthcare.
Réessayer les ressources FHIR dont la récupération en production a échoué
Si une récupération en production a échoué pour certaines ressources FHIR, vous pouvez réessayer la récupération. Utiliser le fichier de sortie de production généré pour trouver les ressources FHIR qui ont échoué. Spécifiez les types de ces ressources FHIR et leurs identifiants dans un fichier de filtre, puis exécutez à nouveau la récupération.
Chaque fois que vous lancez une récupération, elle est idempotente si vous utilisez le la même configuration dans chaque requête. l'horodatage se situe dans les 21 derniers jours.
Limites
La récupération à un moment précis n'applique pas l'intégrité référentielle, Paramètre
disableReferentialIntegrity
sur le store FHIR. Restaurer uniquement certains FHIR ressources peuvent laisser le store FHIR dans un état qui enfreint le référentiel l'intégrité.La récupération à un moment précis ignore la validation du profil FHIR, car les ressources FHIR restaurées ont été validées lors de leur création ou de leur mise à jour. Si le profil du store FHIR configuration modifiée, la récupération à un moment précis peut laisser le store FHIR dans un état qui ne respecte pas la validation du profil.
Si la valeur de
rollbackTime
est antérieure à la date de suppression d'une ressource FHIR dans le store FHIR,enableUpdateCreate
doit être activé pour ce store FHIR ou la ressource ne pourra pas être récupérée.Vous pouvez mettre à jour un store FHIR ou lire et écrire des données pendant une récupération, mais vous pouvez obtenir des résultats inattendus selon l'étape de récupération. Par exemple, Une requête de lecture peut renvoyer une combinaison de valeurs récupérées et non récupérées Ressources FHIR. Si vous mettez à jour une ressource, la récupération peut écraser le mise à jour.
La récupération à un moment précis conserve l'historique des ressources FHIR. Chaque ressource restaurée obtient une nouvelle version actuelle, et son historique est conservé.