Esta página explica como configurar um repositório FHIR para exportar automaticamente recursos FHIR para tabelas do BigQuery sempre que um recurso FHIR é criado, atualizado corrigidos ou excluídos. Esse processo é chamado de streaming do BigQuery.
Você pode usar o streaming do BigQuery para fazer o seguinte:
- Sincronize os dados em um repositório FHIR com um conjunto de dados do BigQuery quase tempo real.
- Execute consultas complexas em dados FHIR sem precisar exportá-los para o BigQuery sempre que quiser analisar os dados.
Para melhorar o desempenho de consultas e reduzir custos, você pode configurar o BigQuery streaming para tabelas particionadas. Para instruções, consulte Fazer streaming de recursos FHIR para tabelas particionadas.
Antes de começar
Lida Como exportar recursos FHIR para o BigQuery para entender como funciona o processo de exportação.
Limitações
Se você importar recursos FHIR do Cloud Storage, faça o seguinte: elas não são transmitidas para o BigQuery.
Como configurar permissões do BigQuery
Para ativar o streaming do BigQuery, conceda permissões adicionais ao Agente de serviço do Cloud Healthcare conta de serviço. Para mais informações, consulte Permissões do BigQuery para armazenar FHIR.
Configurar o streaming do BigQuery em um armazenamento FHIR
Para ativar o streaming do BigQuery, configure o StreamConfigs
no repositório FHIR. No StreamConfigs
, é possível configurar o resourceTypes[]
.
matriz para controlar os tipos de recursos FHIR de streaming do BigQuery
se aplica. Se você não especificar resourceTypes[]
, o BigQuery
o streaming se aplica a todos os tipos de recursos FHIR.
Para explicações sobre outras configurações disponíveis no StreamConfigs
, como
BigQueryDestination
,
consulte Como exportar recursos FHIR.
Os exemplos a seguir mostram como ativar o streaming no BigQuery um repositório FHIR atual.
Console
Para configurar o streaming do BigQuery em um armazenamento FHIR atual usando o Console do Google Cloud, siga estas etapas:
No console do Google Cloud, acesse a página Conjuntos de dados.
Selecione o conjunto de dados que contém o armazenamento FHIR que você quer editar.
Na lista Repositórios de dados, clique no repositório FHIR que você quer editar.
Na seção Streaming do BigQuery, faça o seguinte: etapas:
- Clique em Adicionar nova configuração de streaming.
- Na seção Nova configuração de streaming, clique em Procurar para selecione o conjunto de dados do BigQuery em que você quer fazer streaming dos recursos FHIR alterados.
- Na lista suspensa Tipo de esquema, selecione o esquema de saída para o
Tabela do BigQuery. Os seguintes esquemas estão disponíveis:
- Google Analytics. Um esquema baseado no documento SQL no FHIR. Como o BigQuery permite apenas 10.000 colunas por tabela, os esquemas não são gerados para os campos
Parameters.parameter.resource
,Bundle.entry.resource
eBundle.entry.response.outcome
. - Google Analytics V2. Um esquema semelhante ao do Google Analytics, com suporte adicional para o seguinte: O esquema do Google Analytics V2 usa mais espaço na tabela de destino do que o esquema do Analytics.
- Google Analytics. Um esquema baseado no documento SQL no FHIR. Como o BigQuery permite apenas 10.000 colunas por tabela, os esquemas não são gerados para os campos
- Selecione um nível de profundidade em Profundidade da estrutura recursiva controle deslizante para definir a profundidade de todas as estruturas recursivas no esquema de saída. Por padrão, o valor recursivo é 2.
- Na lista Selecionar tipos de recursos FHIR, selecione os tipos de recursos para transmitir.
Clique em Concluído para salvar a configuração de streaming.
gcloud
A CLI gcloud não é compatível com essa ação. Em vez disso, use o console do Google Cloud, o curl
, o PowerShell ou o idioma de sua preferência.
REST
Para configurar o streaming do BigQuery em um armazenamento FHIR atual, use o
projects.locations.datasets.fhirStores.patch
.
Os exemplos a seguir não especificam a matriz resourceTypes[]
.
Portanto, o streaming do BigQuery está ativado para todos os tipos de recursos FHIR.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- PROJECT_ID: o ID do seu projeto do Google Cloud;
- LOCATION: o local do conjunto de dados;
- DATASET_ID: o conjunto de dados pai do armazenamento de FHIR
- FHIR_STORE_ID: o ID de armazenamento de FHIR
- BIGQUERY_DATASET_ID: o nome de um conjunto de dados do BigQuery em que você está transmitindo alterações de recursos do FHIR
- SCHEMA_TYPE: um valor para o tipo enumerado
SchemaType
. Use um dos seguintes valores:ANALYTICS
: Um esquema baseado no documento SQL no FHIR. Como o BigQuery permite apenas 10.000 colunas por tabela, os esquemas não são gerados para os camposParameters.parameter.resource
,Bundle.entry.resource
eBundle.entry.response.outcome
.ANALYTICS_V2
: Um esquema semelhante aANALYTICS
com suporte adicional para o seguinte:
.ANALYTICS_V2
usa mais espaço na tabela de destino do queANALYTICS
- WRITE_DISPOSITION: um valor para o tipo enumerado
WriteDisposition
. Use um dos seguintes valores:WRITE_EMPTY
: Só exporte dados se as tabelas de destino do BigQuery estiverem vazias.WRITE_TRUNCATE
: Apague todos os dados atuais nas tabelas do BigQuery antes de gravar os recursos FHIR.WRITE_APPEND
: Anexar dados às tabelas de destino do BigQuery.
Corpo JSON da solicitação:
{ "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", }, "writeDisposition": "WRITE_DISPOSITION" } } ] }
Para enviar a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo chamado request.json
.
Execute o comando a seguir no terminal para criar ou substituir
esse arquivo no diretório atual:
cat > request.json << 'EOF' { "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", }, "writeDisposition": "WRITE_DISPOSITION" } } ] } EOF
Depois execute o comando a seguir para enviar a solicitação REST:
curl -X PATCH \
-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?updateMask=streamConfigs"
PowerShell
Salve o corpo da solicitação em um arquivo chamado request.json
.
Execute o comando a seguir no terminal para criar ou substituir
esse arquivo no diretório atual:
@' { "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", }, "writeDisposition": "WRITE_DISPOSITION" } } ] } '@ | Out-File -FilePath request.json -Encoding utf8
Depois execute o comando a seguir para enviar a solicitação REST:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-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?updateMask=streamConfigs" | Select-Object -Expand Content
APIs Explorer
Copie o corpo da solicitação e abra o página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Cole o corpo da solicitação nessa ferramenta, preencha todos os outros campos obrigatórios e clique em Executar.
Você receberá uma resposta JSON semelhante a seguinte.
Se você configurou campos no recurso FhirStore
, eles também vão aparecer na resposta.
Por padrão, ao fazer streaming de alterações de recursos FHIR para o BigQuery, uma visualização é criada para cada recurso transmitido por streaming. A visualização tem as seguintes propriedades:
- Ela tem o mesmo nome que o recurso e a tabela do recurso no
conjunto de dados do BigQuery. Por exemplo, quando você transmite um
uma tabela chamada
Patient
é criada com uma visualização chamadaPatientview
. - Ele contém apenas a versão atual do recurso, em vez de todos os dados históricos mais recentes.
Fazer streaming de recursos FHIR para tabelas particionadas
Para exportar recursos FHIR para tabelas particionadas do BigQuery, defina o
TimePartitioning
enum na
lastUpdatedPartitionConfig
no seu repositório FHIR.
As tabelas particionadas funcionam como o BigQuery
tabelas particionadas por unidade de tempo.
As tabelas particionadas têm uma coluna chamada lastUpdated
, que é uma cópia
da coluna meta.lastUpdated
que é gerada a partir do campo meta.lastUpdated
no
um recurso FHIR. O BigQuery usa a propriedade lastUpdated
para particionar tabelas por hora, dia, mês ou ano.
Consulte Selecionar particionamento por dia, hora, mês ou ano para recomendações sobre como selecionar uma granularidade de partição.
Não é possível converter tabelas do BigQuery não particionadas em
em tabelas particionadas. Se você exportar o recurso "Paciente"
mudanças em uma tabela Patients
não particionada e
depois criar um novo repositório FHIR com particionamento de tabela que exporta para o mesmo
conjunto de dados do BigQuery, a API Cloud Healthcare ainda exporta dados
à tabela Patients
não particionada. Para começar a usar uma tabela particionada,
Exclua a tabela Patients
atual ou use outro conjunto de dados do BigQuery.
Se você adicionar o particionamento a uma configuração de repositório FHIR, ainda poderá exportar para tabelas não particionadas atuais. No entanto, o particionamento só terá efeito em novas tabelas.
Os exemplos a seguir mostram como ativar o streaming do BigQuery para tabelas particionadas em um repositório FHIR atual.
Console
O console do Google Cloud e a CLI gcloud não são compatíveis com essa ação. Em vez disso, use curl
, PowerShell ou sua linguagem preferida.
gcloud
O console do Google Cloud e a CLI gcloud não são compatíveis com essa ação. Em vez disso, use curl
, PowerShell ou sua linguagem preferida.
REST
Para configurar o streaming do BigQuery para tabelas particionadas em uma
repositório FHIR atual, use o
projects.locations.datasets.fhirStores.patch
.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- PROJECT_ID: o ID do seu projeto do Google Cloud;
- LOCATION: o local do conjunto de dados;
- DATASET_ID: o conjunto de dados pai do armazenamento de FHIR
- FHIR_STORE_ID: o ID de armazenamento de FHIR
- BIGQUERY_DATASET_ID: o nome de um conjunto de dados do BigQuery em que você está transmitindo alterações de recursos do FHIR
- SCHEMA_TYPE: um valor para o tipo enumerado
SchemaType
. Use um dos seguintes valores:ANALYTICS
: Um esquema baseado no documento SQL no FHIR. Como o BigQuery permite apenas 10.000 colunas por tabela, os esquemas não são gerados para os camposParameters.parameter.resource
,Bundle.entry.resource
eBundle.entry.response.outcome
.ANALYTICS_V2
: Um esquema semelhante aANALYTICS
com suporte adicional para o seguinte:
.ANALYTICS_V2
usa mais espaço na tabela de destino do queANALYTICS
- TIME_PARTITION_TYPE: a granularidade para particionar os recursos FHIR exportados. Use um dos seguintes valores:
HOUR
: particiona dados por hora.DAY
: particionar dados por diaMONTH
: particionar dados por mêsYEAR
: particionar dados por ano
- WRITE_DISPOSITION: um valor para o tipo enumerado
WriteDisposition
. Use um dos seguintes valores:WRITE_EMPTY
: Só exporte dados se as tabelas de destino do BigQuery estiverem vazias.WRITE_TRUNCATE
: Apague todos os dados atuais nas tabelas do BigQuery antes de gravar os recursos FHIR.WRITE_APPEND
: Anexar dados às tabelas de destino do BigQuery.
Corpo JSON da solicitação:
{ "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", "lastUpdatedPartitionConfig": { "type": "TIME_PARTITION_TYPE" } }, "writeDisposition": "WRITE_DISPOSITION" } } ] }
Para enviar a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo chamado request.json
.
Execute o comando a seguir no terminal para criar ou substituir
esse arquivo no diretório atual:
cat > request.json << 'EOF' { "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", "lastUpdatedPartitionConfig": { "type": "TIME_PARTITION_TYPE" } }, "writeDisposition": "WRITE_DISPOSITION" } } ] } EOF
Depois execute o comando a seguir para enviar a solicitação REST:
curl -X PATCH \
-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?updateMask=streamConfigs"
PowerShell
Salve o corpo da solicitação em um arquivo chamado request.json
.
Execute o comando a seguir no terminal para criar ou substituir
esse arquivo no diretório atual:
@' { "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", "lastUpdatedPartitionConfig": { "type": "TIME_PARTITION_TYPE" } }, "writeDisposition": "WRITE_DISPOSITION" } } ] } '@ | Out-File -FilePath request.json -Encoding utf8
Depois execute o comando a seguir para enviar a solicitação REST:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-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?updateMask=streamConfigs" | Select-Object -Expand Content
APIs Explorer
Copie o corpo da solicitação e abra o página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Cole o corpo da solicitação nessa ferramenta, preencha todos os outros campos obrigatórios e clique em Executar.
Você receberá uma resposta JSON semelhante a esta:
Consultar uma tabela particionada
Para reduzir os custos de consulta ao consultar tabelas particionadas, use o
WHERE
para filtrar por unidades de tempo.
Por exemplo, suponha que você defina o
PartitionType
enumeração como DAY
.
Para consultar uma tabela Patients
para recursos de pacientes que foram alterados em um horário
execute a seguinte consulta:
SELECT * FROM `PROJECT_ID.BIGQUERY_DATASET.Patients` WHERE DATE(lastUpdated) = 'YYYY-MM-DD'
Migrar do Google Analytics para o Google Analytics V2
Não é possível migrar um conjunto de dados atual do BigQuery da Analytics
para o esquema Analytics V2
usando qualquer método, incluindo o seguinte:
- Como alterar o tipo de esquema da tabela. no BigQuery.
- Alterar o tipo de esquema em uma configuração de streaming atual do FHIR.
Isso ocorre porque as colunas da tabela do BigQuery para
Extensões FHIR
no esquema Analytics
têm o modo definido como NULLABLE
, enquanto os
no esquema Analytics V2
, elas são definidas como REPEATED
. BigQuery
não permite alterar o modo de uma coluna de NULLABLE
para REPEATED
.
Portanto, os dois tipos de esquema são incompatíveis.
Para migrar o tipo de esquema dos recursos FHIR exportados de Analytics
para
Analytics V2
, você precisa exportar os recursos FHIR para um novo BigQuery
usando uma nova configuração de streaming com o tipo de esquema atualizado. Afazeres
Portanto, siga estas etapas:
Adicionar uma nova configuração de streaming ao armazenamento FHIR com o tipo de esquema definido como
Analytics V2
.Preencha os dados atuais exportando os dados do FHIR usando as configurações a seguir. Consulte Como exportar recursos FHIR para instruções sobre como definir essas configurações usando o console do Google Cloud, a Google Cloud CLI ou a API REST. As configurações a seguir se aplicam à API REST:
- Definir
WriteDisposition
paraWRITE_APPEND
para anexar os dados à tabela de destino. - Definir
SchemaType
paraANALYTICS_V2
.
- Definir
As visualizações no BigQuery que correspondem a alguns ou todos os recursos FHIR no conjunto de dados original do BigQuery podem estar faltando no novo no conjunto de dados. Para resolver isso, consulte Criação de visualizações de recursos FHIR ausentes.
Solução de problemas de streaming do FHIR
Se ocorrerem erros quando as alterações de recursos forem enviadas ao BigQuery, eles serão registrados no Cloud Logging. Para mais informações, consulte Como visualizar registros de erros no Cloud Logging.
Não é possível converter a coluna de NULLABLE para REPEATED.
Esse erro é causado por uma extensão repetida. Para resolver esse erro,
use o ANALYTICS_V2
tipo de esquema. Se você já usa o ANALYTICS_V2
, talvez tenha um
um conflito entre duas extensões ou um conflito entre uma extensão e outra
.
Os nomes das colunas são gerados a partir do texto após o último caractere /
em
os URLs de extensão. Se um URL de extensão terminar com um valor como
/resource_field name
, pode ocorrer um conflito.
Para evitar que esse erro ocorra novamente, não use extensões se o campo delas são os mesmos dos campos de recursos que você está preenchendo.
A criação da visualização de recursos FHIR está ausente
Se você exportar em massa um recurso FHIR para o BigQuery antes de fazer streaming desse recurso, o BigQuery não criará visualizações para o recurso FHIR.
Por exemplo, você não verá visualizações de recursos Consulta na seguinte situação:
Você configurou o streaming do BigQuery em um armazenamento FHIR e usou a API REST para criar um recurso Paciente.
O BigQuery cria uma tabela e uma visualização do recurso Paciente.
Você exportou em massa recursos Consulta para o mesmo conjunto de dados do BigQuery usado na etapa anterior.
O BigQuery cria uma tabela para os recursos Consulta.
Você usou a API REST para criar um recurso Consulta.
Após esta etapa, as visualizações do BigQuery deixam de ser criadas para o recurso Consulta.
Para resolver esse problema, use a seguinte consulta para criar uma vista:
SELECT * EXCEPT (_resource_row_id) FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY id ORDER BY meta.lastUpdated DESC) as _resource_row_id, * FROM `PROJECT_ID.BIGQUERY_DATASET_ID.RESOURCE_TABLE` AS p ) AS p WHERE p._resource_row_id=1 AND NOT EXISTS ( SELECT * FROM UNNEST(p.meta.tag) WHERE code = 'DELETE');
Substitua:
- PROJECT_ID: o ID do seu projeto do Google Cloud;
- BIGQUERY_DATASET_ID: o ID do conjunto de dados do BigQuery em que você exportou em massa o recurso FHIR;
- RESOURCE_TABLE: o nome da tabela correspondente ao recurso FHIR para o qual você quer criar visualizações.
Depois de criar a visualização, é possível continuar transmitindo alterações para o FHIR recurso, e a visualização é atualizada de acordo com ele.
A seguir
Veja um tutorial sobre um caso de uso de streaming de alterações de recursos FHIR em Transmitir e sincronizar recursos FHIR com o BigQuery.