Esta página descreve como usar a recuperação num ponto específico no tempo (PITR) para recuperar recursos FHIR numa loja FHIR para um estado nos últimos 21 dias. Pode usar a PITR para recuperar de alterações indesejadas, como a eliminação acidental de recursos FHIR.
Antes de começar
Os pedidos PITR são categorizados como pedidos de operação avançados e são faturados em conformidade. Antes de usar a PITR, reveja os preços dos pedidos de operações avançadas.
PITR e histórico de versões de recursos FHIR
A PITR não depende do histórico de versões de recursos FHIR.
Pode continuar a usar o PITR se o campo disableResourceVersioning
numa loja FHIR for true
ou se as versões históricas de um recurso FHIR tiverem sido eliminadas.
Fluxo de trabalho de recuperação
Para garantir que uma recuperação de produção é executada conforme esperado, faça primeiro um teste. A execução de teste produz um ou mais ficheiros que contêm os IDs e os tipos dos recursos FHIR a recuperar. Valide a correção dos ficheiros de saída antes de executar novamente a recuperação em produção.
Para recuperar recursos específicos ou recuperar recursos de acordo com critérios de filtragem, especifique um filtro.
Faça uma execução de ensaio
Antes de recuperar recursos FHIR em produção, faça um teste.
Os exemplos seguintes mostram como fazer um teste de execução
usando o método fhirStores.rollback
.
REST
Recuperar os recursos FHIR.
Para fazer um teste, certifique-se de que o campo
force
estáfalse
.Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_ID
: o ID do seu Google Cloud projetoLOCATION
: a localização do conjunto de dadosDATASET_ID
: o conjunto de dados principal do FHIR storeFHIR_STORE_ID
: o ID da loja FHIRRECOVERY_TIMESTAMP
: um ponto de recuperação nos últimos 21 dias. Use o formato RFC 3339. Especifique a hora até ao segundo e inclua um fuso horário, por exemplo,2015-02-07T13:28:17.239+02:00
ou2017-01-01T00:00:00Z
.CLOUD_STORAGE_BUCKET
: o URI totalmente qualificado para uma pasta ou um contentor do Cloud Storage onde os ficheiros de saída são escritos
Corpo JSON do pedido:
{ "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "false" }
Para enviar o seu pedido, escolha uma destas opções:
curl
Guarde o corpo do pedido num ficheiro denominado
request.json
. Execute o seguinte comando no terminal para criar ou substituir este ficheiro no diretório atual:cat > request.json << 'EOF' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "false" } EOF
Em seguida, execute o seguinte comando para enviar o seu pedido 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
Guarde o corpo do pedido num ficheiro denominado
request.json
. Execute o seguinte comando no terminal para criar ou substituir este ficheiro no diretório atual:@' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "false" } '@ | Out-File -FilePath request.json -Encoding utf8
Em seguida, execute o seguinte comando para enviar o seu pedido 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 ContentExplorador de APIs
Copie o corpo do pedido e abra a página de referência do método. O painel APIs Explorer é aberto no lado direito da página. Pode interagir com esta ferramenta para enviar pedidos. Cole o corpo do pedido nesta ferramenta, preencha todos os outros campos obrigatórios e clique em Executar.
OPERATION_ID
. Precisa deste valor no passo seguinte.Use o método
projects.locations.datasets.operations.get
para obter o estado da operação de execução longa.Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_ID
: o ID do seu Google Cloud projetoDATASET_ID
: o ID do conjunto de dadosLOCATION
: a localização do conjunto de dadosOPERATION_ID
: o ID devolvido pela operação de longa duração
Para enviar o seu pedido, escolha uma destas opções:
curl
Execute o seguinte comando:
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
Execute o seguinte comando:
$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 ContentExplorador de APIs
Abra a página de referência do método. O painel APIs Explorer é aberto no lado direito da página. Pode interagir com esta ferramenta para enviar pedidos. Preencha todos os campos obrigatórios e clique em Executar.
"done": true
, a operação de longa duração terminou.
Veja os ficheiros de saída da execução de ensaio
Cada teste de execução produz um ou mais ficheiros que contêm os IDs e os tipos de recursos FHIR a recuperar. Os ficheiros são criados numa subpasta na pasta rollback_resources
no contentor do Cloud Storage de destino. O nome da subpasta é o ID da LRO devolvido na resposta fhirStores.rollback
. Para ver os ficheiros e garantir que a recuperação funciona conforme esperado, consulte o artigo Ver metadados de objetos.
O número de ficheiros é proporcional ao número de recursos FHIR recuperados.
Os nomes dos ficheiros usam o formato trial-NUMBER-of-TOTAL_NUMBER.txt
, em que NUMBER
é o número do ficheiro e TOTAL_NUMBER
é o número total de ficheiros.
Esquema do ficheiro de saída da execução de ensaio
Os ficheiros de saída de uma recuperação de teste usam o esquema apresentado na tabela seguinte:
RESOURCE_TYPE |
RESOURCE_ID |
TIMESTAMP |
---|---|---|
O tipo de recurso FHIR. | O ID do recurso FHIR. | A hora em que o recurso FHIR foi criado ou atualizado na loja FHIR. |
Recupere em produção
Antes de fazer a recuperação em produção, faça um teste de simulação e inspecione os ficheiros de saída do teste de simulação para garantir que a recuperação de produção é executada conforme esperado.
Os exemplos seguintes mostram como restaurar recursos FHIR em produção
usando o método fhirStores.rollback
.
REST
Recuperar os recursos FHIR.
Certifique-se de que o campo
force
estátrue
.Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_ID
: o ID do seu Google Cloud projetoLOCATION
: a localização do conjunto de dadosDATASET_ID
: o conjunto de dados principal do FHIR storeFHIR_STORE_ID
: o ID da loja FHIRRECOVERY_TIMESTAMP
: um ponto de recuperação nos últimos 21 dias. Use o formato RFC 3339. Especifique a hora até ao segundo e inclua um fuso horário, por exemplo,2015-02-07T13:28:17.239+02:00
ou2017-01-01T00:00:00Z
.CLOUD_STORAGE_BUCKET
: o URI totalmente qualificado para uma pasta ou um contentor do Cloud Storage onde os ficheiros de saída são escritos
Corpo JSON do pedido:
{ "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "true" }
Para enviar o seu pedido, escolha uma destas opções:
curl
Guarde o corpo do pedido num ficheiro denominado
request.json
. Execute o seguinte comando no terminal para criar ou substituir este ficheiro no diretório atual:cat > request.json << 'EOF' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "true" } EOF
Em seguida, execute o seguinte comando para enviar o seu pedido 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
Guarde o corpo do pedido num ficheiro denominado
request.json
. Execute o seguinte comando no terminal para criar ou substituir este ficheiro no diretório atual:@' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "true" } '@ | Out-File -FilePath request.json -Encoding utf8
Em seguida, execute o seguinte comando para enviar o seu pedido 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 ContentExplorador de APIs
Copie o corpo do pedido e abra a página de referência do método. O painel APIs Explorer é aberto no lado direito da página. Pode interagir com esta ferramenta para enviar pedidos. Cole o corpo do pedido nesta ferramenta, preencha todos os outros campos obrigatórios e clique em Executar.
OPERATION_ID
. Precisa deste valor no passo seguinte.Use o método
projects.locations.datasets.operations.get
para obter o estado da operação de execução longa.Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_ID
: o ID do seu Google Cloud projetoDATASET_ID
: o ID do conjunto de dadosLOCATION
: a localização do conjunto de dadosOPERATION_ID
: o ID devolvido pela operação de longa duração
Para enviar o seu pedido, escolha uma destas opções:
curl
Execute o seguinte comando:
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
Execute o seguinte comando:
$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 ContentExplorador de APIs
Abra a página de referência do método. O painel APIs Explorer é aberto no lado direito da página. Pode interagir com esta ferramenta para enviar pedidos. Preencha todos os campos obrigatórios e clique em Executar.
"done": true
, a operação de longa duração terminou.
Veja os ficheiros de saída da recuperação de produção
Uma recuperação de produção gera os seguintes ficheiros. Os ficheiros são criados numa subpasta na pasta rollback_resources
no contentor do Cloud Storage de destino. O nome da subpasta é o ID da LRO devolvido na resposta fhirStores.rollback
. Para ver os ficheiros, consulte o artigo
Ver metadados de objetos.
success-NUMBER-of-TOTAL_NUMBER.txt
: contém recursos FHIR recuperados com êxito.fail-NUMBER-of-TOTAL_NUMBER.txt
: contém recursos FHIR que não foram recuperados. É gerado um ficheiro vazio mesmo que não existam falhas.
Nos nomes dos ficheiros, NUMBER
é o número do ficheiro e TOTAL_NUMBER
é o número total de ficheiros.
Esquema do ficheiro de saída de produção
Os ficheiros de êxito e falha de uma recuperação de produção usam o seguinte esquema. Os ficheiros de erro contêm uma coluna ERROR_MESSAGE
adicional.
RESOURCE_TYPE |
RESOURCE_ID |
ROLLBACK_VERSION_ID |
NEW_VERSION_ID |
ERROR_MESSAGE (apenas ficheiros com erros) |
---|---|---|---|---|
O tipo de recurso FHIR. | O ID do recurso FHIR. | O ID da versão atual do recurso no momento em que a recuperação foi iniciada. | O ID da versão atual do recurso após a recuperação. Se o valor de disableResourceVersioning for true ou se a recuperação de um recurso eliminar o recurso, ROLLBACK_VERSION_ID e NEW_VERSION_ID estão vazios. |
Apenas ficheiros de erro. Descreve o motivo pelo qual o recurso FHIR não foi recuperado. |
Use filtros para recuperar recursos FHIR específicos
As secções seguintes descrevem como usar filtros para recuperar
recursos FHIR com base num critério de filtro.
Especifica os filtros no objeto RollbackFhirResourceFilteringFields
quando envia um pedido fhirStores.rollback
.
Pode combinar filtros ou usá-los individualmente para vários exemplos de utilização, incluindo o seguinte:
- Recuperar recursos FHIR específicos após a eliminação acidental, enquanto deixa outros inalterados.
- Restaurar um FHIR store para um estado anterior a uma operação de importação específica importou determinados recursos FHIR.
Use um ficheiro de filtro
Por predefinição, a PITR recupera todos os recursos FHIR numa loja FHIR. Para recuperar recursos FHIR específicos, especifique os tipos de recursos e os respetivos IDs de recursos num ficheiro e, em seguida, carregue o ficheiro para o Cloud Storage. Especifique a localização do ficheiro no campo inputGcsObject
.
Para ler um ficheiro de filtro do Cloud Storage, tem de conceder autorizações à conta de serviço do agente do Cloud Healthcare Service. Para mais informações, consulte o artigo Leia ficheiros de filtro do Cloud Storage.
O ficheiro de filtro pode ter qualquer extensão. Tem de usar o seguinte esquema, com um recurso FHIR por linha:
FHIR_RESOURCE_TYPE/FHIR_RESOURCE_ID
Por exemplo, para recuperar um recurso Patient com o ID 8f25b0ac
e dois recursos Observation com os IDs d507417e90e
e e9950d90e
, especifique o seguinte no ficheiro de filtro:
Patient/8f25b0ac
Observation/d507417e90e
Observation/e9950d90e
Use funções personalizadas
A API Cloud Healthcare oferece as seguintes funções de filtragem personalizadas.
Pode combinar as funções personalizadas com o campo
rollbackTime
para aplicar um filtro adicional.
tag
Detalhes Sintaxe da função tag("system") = "code"
Descrição Filtra recursos FHIR com base no elementoMeta.tag
do recurso.Argumentos system
string
Um URL que faz referência a um sistema de códigos. Para mais informações, consulte o artigo Usar códigos em recursos.code
string
Um valor que identifica um conceito conforme definido pelo sistema de códigos. Para mais informações, consulte o artigo Usar códigos em recursos.
extension_value_ts
Detalhes Sintaxe da função extension_value_ts("url")
Descrição Filtra recursos FHIR com base no valorurl
num elementoextension
em queurl
é uma indicação de tempo Unix. Suporta os seguintes operadores de comparação:=
!=
<
>
<=
>=
Argumentos url
string
O URL canónico de um recurso StructureDefinition que define uma extensão. Por exemplo, no elementoextension
seguinte, ourl
éhttp://hl7.org/fhir/StructureDefinition/timezone
:"extension" : [{ "url" : "http://hl7.org/fhir/StructureDefinition/timezone", "valueCode" : "America/New_York" }]
Para mais informações, consulte o artigo Definir extensões.
Filtre por tipo de recurso FHIR
Para filtrar recursos FHIR
de forma mais abrangente com base apenas no tipo de recurso, especifique os tipos de recursos na matriz
types[]
.
Filtre por tipo de operação
Para filtrar recursos FHIR que foram modificados por uma transação CREATE
, UPDATE
ou DELETE
, especifique um valor na enumeração ChangeType
.
Por exemplo, para recuperar apenas recursos FHIR que foram eliminados, especifique o valor DELETE
.
Se especificar CHANGE_TYPE_UNSPECIFIED
,
ALL
,
ou não especificar um valor, todos os recursos FHIR são recuperados.
Exclua recuperações anteriores
Para excluir recuperações anteriores ao recuperar recursos FHIR, defina o campo excludeRollbacks
como true
. Pode excluir recuperações anteriores se as recuperações funcionaram corretamente e não quiser substituir as respetivas alterações.
Também pode executar várias recuperações com datas/horas sobrepostas.
Considere o seguinte cenário:
- Em
1:00
, inicia uma recuperação com a indicação de tempo de recuperação definida como0:01
. Em2:00
, a operação de recuperação elimina os recursos de pacientesPatient/1
ePatient/2
na loja FHIR. A operação de recuperação termina a3:00
. Vários dias depois, executa uma operação de recuperação com a data/hora de recuperação definida como
1:00
. Por predefinição, a execução da operação resultaria no seguinte:- Recriar incorretamente os recursos
Patient/1
ePatient/2
Patient. - Recuperar corretamente recursos FHIR criados ou atualizados após
3:00
.
- Recriar incorretamente os recursos
Para excluir a operação de recuperação inicial que eliminou os recursos de pacientes Patient/1
e Patient/2
e evitar recriá-los, defina excludeRollbacks
como true
.
Filtre através de IDs de operações de longa duração (LRO)
Se os recursos FHIR foram modificados por uma ou mais operações de longa duração (LROs),
pode especificar os IDs das LROs no campo operationIds
para recuperar os recursos modificados.
Consulte o artigo Apresentar LROs em lista para obter informações sobre como apresentar em lista e ver IDs de LROs num conjunto de dados da Cloud Healthcare API.
Repita os recursos FHIR que não foram recuperados em produção
Se alguns recursos FHIR falharem uma recuperação de produção, pode tentar a recuperação novamente. Use o ficheiro de saída de produção gerado para encontrar os recursos FHIR com falhas. Especifique os tipos destes recursos FHIR e os respetivos IDs num ficheiro de filtro e execute novamente a recuperação.
Cada vez que executa uma recuperação, a recuperação é idempotente se usar a mesma configuração em cada pedido e a data/hora estiver nos últimos 21 dias.
Limitações
A PITR não aplica a integridade referencial, independentemente da definição
disableReferentialIntegrity
na loja FHIR. O restauro de apenas alguns recursos FHIR pode deixar o arquivo FHIR num estado que viola a integridade referencial.A PITR ignora a validação do perfil FHIR porque os recursos FHIR restaurados foram validados quando foram criados ou atualizados. Se a configuração do perfil da loja FHIR tiver sido alterada, a PITR pode deixar a loja FHIR num estado que viole a validação do perfil.
Se o valor de
rollbackTime
preceder a hora em que um recurso FHIR foi eliminado na FHIR store, a FHIR store tem de ter a opçãoenableUpdateCreate
ativada ou o recurso não é recuperado.Pode atualizar uma loja FHIR ou ler e escrever dados durante uma recuperação, mas pode ver resultados inesperados consoante a fase de recuperação. Por exemplo, um pedido de leitura pode devolver uma combinação de recursos FHIR recuperados e não recuperados. Se atualizar um recurso, a recuperação pode substituir a atualização.
A PITR mantém o histórico de recursos FHIR. Cada recurso restaurado tem uma nova versão atual e o respetivo histórico é mantido.