Copiar dados do serviço FHIR para o Azure Synapse Analytics
Neste artigo, irá aprender três formas de copiar dados do serviço FHIR nos Serviços de Dados de Saúde do Azure para o Azure Synapse Analytics, que é um serviço de análise ilimitado que reúne integração de dados, armazenamento de dados empresariais e análise de macrodados.
- Utilizar a ferramenta OSS do Agente de Sincronização FHIR para Synapse
- Utilizar a ferramenta OSS do gerador de pipelines FHIR para CDM
- Utilizar $export e carregar dados para o Synapse com t-SQL
Utilizar a ferramenta OSS do Agente de Sincronização FHIR para Synapse
Nota
O FHIR para o Agente de Sincronização do Synapse é uma ferramenta de open source lançada sob licença do MIT e não é abrangida pelo SLA da Microsoft para serviços do Azure.
O FHIR para o Agente de Sincronização do Synapse é um projeto do Microsoft OSS lançado ao abrigo da Licença do MIT. É uma função do Azure que extrai dados de um servidor FHIR com APIs de Recursos FHIR, converte-os em ficheiros parquet hierárquicos e escreve-os no Azure Data Lake quase em tempo real. Isto também contém um script para criar tabelas e vistas externas no conjunto de SQL sem servidor do Synapse que aponta para os ficheiros Parquet.
Esta solução permite-lhe consultar todos os dados FHIR com ferramentas como Synapse Studio, SSMS e Power BI. Também pode aceder aos ficheiros Parquet diretamente a partir de um conjunto do Synapse Spark. Deve considerar esta solução se quiser aceder a todos os seus dados FHIR quase em tempo real e pretender adiar a transformação personalizada para sistemas a jusante.
Siga a documentação do OSS para obter instruções de instalação e utilização.
Utilizar a ferramenta OSS do gerador de pipelines FHIR para CDM
Nota
O gerador de pipelines FHIR para CDM é uma ferramenta de open source disponibilizada ao abrigo da licença do MIT e não é abrangida pelo SLA da Microsoft para serviços do Azure.
O gerador de pipelines FHIR para CDM é um projeto do Microsoft OSS lançado ao abrigo da Licença do MIT. É uma ferramenta para gerar um pipeline do ADF para copiar um instantâneo de dados de um servidor FHIR com $export API, transformá-lo em formato csv e escrever numa pasta CDM no Azure Data Lake Storage Gen 2. A ferramenta requer um ficheiro de configuração criado pelo utilizador que contenha instruções para projetar e aplanar recursos e campos FHIR em tabelas. Também pode seguir as instruções para criar um pipeline a jusante na área de trabalho do Synapse para mover dados da pasta CDM para o conjunto de SQL dedicado do Synapse.
Esta solução permite-lhe transformar os dados em formato tabular à medida que são escritos na pasta CDM. Deve considerar esta solução se quiser transformar dados FHIR num esquema personalizado depois de ser extraído do servidor FHIR.
Siga a documentação do OSS para obter instruções de instalação e utilização.
Carregar dados exportados para o Synapse com t-SQL
Nesta abordagem, vai utilizar a operação FHIR $export
para copiar recursos FHIR para um armazenamento de blobs do Azure Data Lake Gen2 (ADL Gen 2) em NDJSON
formato. Posteriormente, carrega os dados do armazenamento para conjuntos de SQL sem servidor ou dedicados no Synapse com t-SQL. Pode converter estes passos num pipeline de movimento de dados robusto com pipelines do Synapse.
Utilizar $export
para copiar dados
Configurar $export
no servidor FHIR
O servidor FHIR nos Serviços de Dados de Saúde do Azure implementa a $export
operação definida pela especificação FHIR para exportar todos ou um subconjunto filtrado de dados FHIR em NDJSON
formato. Além disso, suporta a exportação desidentificado para anonimizar os dados do FHIR durante a exportação.
Para exportar dados FHIR para o armazenamento de blobs do Azure, primeiro tem de configurar o servidor FHIR para exportar dados para a conta de armazenamento. Terá de (1) ativar a Identidade Gerida, (2) aceder a Controlo de Acesso na conta de armazenamento e adicionar atribuição de função, (3) selecionar a sua conta de armazenamento para $export
. Pode encontrar mais passo a passo aqui.
Pode configurar o servidor para exportar os dados para qualquer tipo de conta de armazenamento do Azure, mas recomendamos que exporte para o ADL Gen 2 para melhor alinhamento com o Synapse.
Utilizar $export
o comando
Depois de configurar o servidor FHIR, pode seguir a documentação para exportar os recursos FHIR ao nível do Sistema, Paciente ou Grupo. Por exemplo, pode exportar todos os seus dados FHIR relacionados com os pacientes num Group
com o seguinte $export
comando, no qual especifica o nome do armazenamento de blobs do ADL Gen 2 no campo {{BlobContainer}}
:
https://{{FHIR service base URL}}/Group/{{GroupId}}/$export?_container={{BlobContainer}}
Também pode utilizar _type
o $export
parâmetro na chamada acima para restringir os recursos que pretende exportar. Por exemplo, a chamada seguinte irá exportar apenas Patient
, MedicationRequest
e Observation
recursos:
https://{{FHIR service base URL}}/Group/{{GroupId}}/$export?_container={{BlobContainer}}&
_type=Patient,MedicationRequest,Condition
Para obter mais informações sobre os diferentes parâmetros suportados, consulte a nossa $export
secção de página nos parâmetros de consulta.
Utilizar o Synapse para Análise
Criar uma área de trabalho do Synapse
Antes de utilizar o Synapse, precisará de uma área de trabalho do Synapse. Irá criar um serviço do Azure Synapse Analytics no portal do Azure. Pode encontrar mais guia passo a passo aqui. Precisa de uma ADLSGEN2
conta para criar uma área de trabalho. A sua área de trabalho Azure Synapse utilizará esta conta de armazenamento para armazenar os dados da área de trabalho do Synapse.
Depois de criar uma área de trabalho, pode ver a área de trabalho no Synapse Studio ao iniciar sessão na https://web.azuresynapse.netárea de trabalho ou ao iniciar Synapse Studio no portal do Azure.
Criar um serviço ligado entre o armazenamento do Azure e o Synapse
Para copiar os seus dados para o Synapse, tem de criar um serviço ligado que ligue a sua conta de Armazenamento do Azure, onde exportou os seus dados, com o Synapse. Pode encontrar mais instruções passo a passo aqui.
- Em Synapse Studio, navegue até ao separador Gerir e, em Ligações externas, selecione Serviços ligados.
- Selecione Novo para adicionar um novo serviço ligado.
- Selecione Azure Data Lake Storage Gen2 na lista e selecione Continuar.
- Introduza as suas credenciais de autenticação. Quando terminar, selecione Criar.
Agora que tem um serviço ligado entre o armazenamento do ADL Gen2 e o Synapse, está pronto para utilizar conjuntos de SQL do Synapse para carregar e analisar os seus dados FHIR.
Decidir entre o conjunto de SQL sem servidor e dedicado
Azure Synapse Analytics oferece dois conjuntos de SQL diferentes, conjunto de SQL sem servidor e conjunto de SQL dedicado. O conjunto de SQL sem servidor proporciona a flexibilidade de consultar dados diretamente no armazenamento de blobs com o ponto final do SQL sem servidor sem qualquer aprovisionamento de recursos. O conjunto de SQL dedicado tem o poder de processamento para elevado desempenho e simultaneidade e é recomendado para capacidades de armazenamento de dados à escala empresarial. Para obter mais detalhes sobre os dois conjuntos de SQL, consulte a página de documentação do Synapse sobre a arquitetura do SQL.
Utilizar o conjunto de SQL sem servidor
Uma vez que não tem servidor, não existe nenhuma infraestrutura para configurar ou clusters para manter. Pode começar a consultar dados de Synapse Studio assim que a área de trabalho for criada.
Por exemplo, a seguinte consulta pode ser utilizada para transformar campos selecionados de Patient.ndjson
numa estrutura tabular:
SELECT * FROM
OPENROWSET(bulk 'https://{{youraccount}}.blob.core.windows.net/{{yourcontainer}}/Patient.ndjson',
FORMAT = 'csv',
FIELDTERMINATOR ='0x0b',
FIELDQUOTE = '0x0b')
WITH (doc NVARCHAR(MAX)) AS rows
CROSS APPLY OPENJSON(doc)
WITH (
ResourceId VARCHAR(64) '$.id',
Active VARCHAR(10) '$.active',
FullName VARCHAR(100) '$.name[0].text',
Gender VARCHAR(20) '$.gender',
...
)
Na consulta acima, a função acede a OPENROWSET
ficheiros no Armazenamento do Azure e OPENJSON
analisa o texto JSON e devolve as propriedades de entrada JSON como linhas e colunas. Sempre que esta consulta é executada, o conjunto de SQL sem servidor lê o ficheiro do armazenamento de blobs, analisa o JSON e extrai os campos.
Também pode materializar os resultados no formato Parquet numa Tabela Externa para obter um melhor desempenho de consulta, conforme mostrado abaixo:
-- Create External data source where the parquet file will be written
CREATE EXTERNAL DATA SOURCE [MyDataSource] WITH (
LOCATION = 'https://{{youraccount}}.blob.core.windows.net/{{exttblcontainer}}'
);
GO
-- Create External File Format
CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
FORMAT_TYPE = PARQUET,
DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO
CREATE EXTERNAL TABLE [dbo].[Patient] WITH (
LOCATION = 'PatientParquet/',
DATA_SOURCE = [MyDataSource],
FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM
OPENROWSET(bulk 'https://{{youraccount}}.blob.core.windows.net/{{yourcontainer}}/Patient.ndjson'
-- Use rest of the SQL statement from the previous example --
Utilizar o conjunto de SQL dedicado
O conjunto de SQL dedicado suporta tabelas geridas e uma cache hierárquica para desempenho dentro da memória. Pode importar macrodados com consultas T-SQL simples e, em seguida, utilizar a potência do motor de consulta distribuído para executar análises de alto desempenho.
A forma mais simples e rápida de carregar dados do seu armazenamento para um conjunto de SQL dedicado é utilizar o COPY
comando no T-SQL, que pode ler ficheiros CSV, Parquet e ORC. Tal como na consulta de exemplo abaixo, utilize o COPY
comando para carregar as NDJSON
linhas para uma estrutura tabular.
-- Create table with HEAP, which is not indexed and does not have a column width limitation of NVARCHAR(4000)
CREATE TABLE StagingPatient (
Resource NVARCHAR(MAX)
) WITH (HEAP)
COPY INTO StagingPatient
FROM 'https://{{yourblobaccount}}.blob.core.windows.net/{{yourcontainer}}/Patient.ndjson'
WITH (
FILE_TYPE = 'CSV',
ROWTERMINATOR='0x0a',
FIELDQUOTE = '',
FIELDTERMINATOR = '0x00'
)
GO
Assim que tiver as linhas JSON na StagingPatient
tabela acima, pode criar diferentes formatos tabulares dos dados com a OPENJSON
função e armazenar os resultados em tabelas. Eis uma consulta SQL de exemplo para criar uma Patient
tabela ao extrair alguns campos do Patient
recurso:
SELECT RES.*
INTO Patient
FROM StagingPatient
CROSS APPLY OPENJSON(Resource)
WITH (
ResourceId VARCHAR(64) '$.id',
FullName VARCHAR(100) '$.name[0].text',
FamilyName VARCHAR(50) '$.name[0].family',
GivenName VARCHAR(50) '$.name[0].given[0]',
Gender VARCHAR(20) '$.gender',
DOB DATETIME2 '$.birthDate',
MaritalStatus VARCHAR(20) '$.maritalStatus.coding[0].display',
LanguageOfCommunication VARCHAR(20) '$.communication[0].language.text'
) AS RES
GO
Passos seguintes
Neste artigo, aprendeu três formas diferentes de copiar os seus dados FHIR para o Synapse.
Em seguida, pode saber como pode desidentificador os seus dados FHIR ao exportá-lo para o Synapse para proteger a PHI.
FHIR® é uma marca registada do HL7 e é utilizada com a permissão de HL7.