Copia de datos del servicio FHIR a Azure Synapse Analytics

En este artículo, aprenderá tres maneras de copiar datos del servicio FHIR en Azure Health Data Services a Azure Synapse Analytics, que es un servicio de análisis ilimitado que reúne la integración de datos, el almacenamiento de datos empresariales y el análisis de macrodatos.

Uso de la herramienta FHIR to Synapse Sync Agent OSS

Nota

FHIR al agente de sincronización de Synapse es una herramienta de código abierto publicada en la licencia MIT y no está cubierta por el Acuerdo de Nivel de Servicio de Microsoft para los servicios de Azure.

El agente de sincronización de FHIR a Synapse es un proyecto de OSS de Microsoft publicado en licencia MIT. Es una función de Azure que extrae datos de un servidor FHIR mediante las API de recursos de FHIR, los convierte en archivos Parquet jerárquicos y los escribe en Azure Data Lake casi en tiempo real. Esto también contiene un script para crear tablas y vistas externas en el grupo de SQL sin servidor de Synapse que apunta a los archivos Parquet.

Esta solución le permite consultar todos los datos de FHIR con herramientas como Synapse Studio, SSMS y Power BI. También puede acceder a los archivos Parquet directamente desde un grupo de Synapse Spark. Debe considerar esta solución si desea acceder a todos los datos de FHIR casi en tiempo real y desea aplazar la transformación personalizada a los sistemas de bajada.

Siga la documentación del sistema operativo para obtener instrucciones de instalación y uso.

Uso de la herramienta del generador de canalizaciones de FHIR a CDM

Nota

FHIR al generador de canalizaciones de CDM es una herramienta de código abierto publicada bajo licencia MIT y no está cubierta por el Acuerdo de Nivel de Servicio de Microsoft para los servicios de Azure.

El generador de canalizaciones de FHIR a CDM es un proyecto de OSS de Microsoft publicado bajo la licencia MIT. Se trata de una herramienta para generar una canalización de ADF para copiar una instantánea de datos de un servidor FHIR mediante $export API, transformarla en formato csv y escribir en una carpeta de CDM en Azure Data Lake Storage Gen 2. La herramienta requiere un archivo de configuración creado por el usuario que contenga instrucciones para proyectar y acoplar los campos y recursos de FHIR en tablas. También puede seguir las instrucciones para crear una canalización de bajada en el área de trabajo de Synapse para mover datos de la carpeta CDM al grupo de SQL dedicado de Synapse.

Esta solución le permite transformar los datos en formato tabular a medida que se escribe en la carpeta CDM. Debe considerar esta solución si desea transformar los datos de FHIR en un esquema personalizado después de extraerlos del servidor FHIR.

Siga la documentación del sistema operativo para obtener instrucciones de instalación y uso.

Carga de datos exportados en Synapse mediante T-SQL

En este enfoque, usará la operación FHIR $export para copiar recursos de FHIR en un almacenamiento de blobs de Azure Data Lake Gen 2 (ADL Gen2) en NDJSON formato. Posteriormente, cargará los datos del almacenamiento en grupos de SQL sin servidor o dedicados en Synapse mediante T-SQL. Puede convertir estos pasos en una canalización de movimiento de datos sólida mediante canalizaciones de Synapse.

Azure Storage en Synapse mediante $export.

Uso $export de para copiar datos

$export Configuración en el servidor de FHIR

El servidor FHIR de Azure Health Data Services implementa la $export operación definida por la especificación de FHIR para exportar todos o un subconjunto filtrado de datos de FHIR en NDJSON formato. Además, admite la exportación desidentificada para anonimizar los datos de FHIR durante la exportación.

Para exportar datos de FHIR a Azure Blob Storage, primero debe configurar el servidor FHIR para exportar datos a la cuenta de almacenamiento. Tendrá que habilitar (1) la identidad administrada; (2) vaya a Access Control en la cuenta de almacenamiento y agregue la asignación de roles( 3) seleccione la cuenta de almacenamiento para $export. Puede encontrar más paso a paso aquí.

Puede configurar el servidor para exportar los datos a cualquier tipo de cuenta de almacenamiento de Azure, pero se recomienda exportar a ADL Gen 2 para obtener la mejor alineación con Synapse.

Uso del comando $export

Después de configurar el servidor de FHIR, puede seguir la documentación para exportar los recursos de FHIR en el nivel de sistema, paciente o grupo. Por ejemplo, puede exportar todos los datos de FHIR relacionados con los pacientes de Group con el comando $export siguiente, en el que especifica el nombre del almacenamiento de blobs de ADL Gen 2 en el campo {{BlobContainer}}:

https://{{FHIR service base URL}}/Group/{{GroupId}}/$export?_container={{BlobContainer}}  

También puede usar _type el parámetro en la $export llamada anterior para restringir los recursos que desea exportar. Por ejemplo, la siguiente llamada solo exportará los recursos Patient, MedicationRequest y Observation:

https://{{FHIR service base URL}}/Group/{{GroupId}}/$export?_container={{BlobContainer}}&
_type=Patient,MedicationRequest,Condition

Para obtener más información sobre los distintos parámetros admitidos, consulte nuestra sección de página $export sobre los parámetros de consulta.

Uso de Synapse for Analytics

Creación de un área de trabajo de Synapse

Antes de usar Synapse, necesitará un área de trabajo de Synapse. Creará un servicio Azure Synapse Analytics en Azure Portal. Puede encontrar más instrucciones paso a paso aquí. Necesita una cuenta de ADLSGEN2 para crear un área de trabajo. Su área de trabajo de Azure Synapse utilizará esta cuenta de almacenamiento para almacenar los datos de su área de trabajo de Synapse.

Después de crear un área de trabajo, puede ver el área de trabajo en Synapse Studio iniciando sesión en el área de trabajo en https://web.azuresynapse.neto iniciando Synapse Studio en el Azure Portal.

Creación de un servicio vinculado entre Azure Storage y Synapse

Para copiar los datos en Synapse, debe crear un servicio vinculado que conecte la cuenta de Azure Storage, donde ha exportado los datos, con Synapse. Puede encontrar más instrucciones paso a paso aquí.

  1. En Synapse Studio, vaya a la pestaña Administrar y, en Conexiones externas, seleccione Servicios vinculados.
  2. Seleccione Nuevo para agregar un servicio vinculado.
  3. Seleccione Azure Data Lake Storage Gen2 de la lista y elija Continuar.
  4. Especifique las credenciales de autenticación. Cuando haya terminado, seleccione Crear.

Ahora que tiene un servicio vinculado entre el almacenamiento de ADL Gen 2 y Synapse, está listo para usar grupos de Synapse SQL para cargar y analizar los datos de FHIR.

Decidir entre un grupo SQL dedicado y sin servidor

Azure Synapse Analytics ofrece dos grupos de SQL distintos, un grupo de SQL sin servidor y un grupo de SQL dedicado. El grupo de SQL sin servidor ofrece la flexibilidad de consultar datos directamente en el almacenamiento de blobs mediante el punto de conexión de SQL sin servidor sin ningún aprovisionamiento de recursos. El grupo SQL dedicado tiene la capacidad de procesamiento para un alto rendimiento y simultaneidad, y se recomienda para las funcionalidades de almacenamiento de datos a escala empresarial. Para obtener más información sobre los dos grupos de SQL, consulte la página de documentación de Synapse sobre arquitectura SQL.

Uso del grupo de SQL sin servidor

Puesto que es sin servidor, no hay ninguna infraestructura que se configure ni que se mantengan los clústeres. Puede empezar a consultar datos desde Synapse Studio en cuanto se crea el área de trabajo.

Por ejemplo, la consulta siguiente se puede usar para transformar campos seleccionados de Patient.ndjson en una estructura 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', 
       ...
) 

En la consulta anterior, la función OPENROWSET tiene acceso a los archivos de Azure Storage, y OPENJSON analiza texto JSON y devuelve las propiedades de entrada JSON como filas y columnas. Cada vez que se ejecuta esta consulta, el grupo de SQL sin servidor lee el archivo del almacenamiento de blobs, analiza el código JSON y extrae los campos.

También puede materializar los resultados en formato Parquet en una tabla externa para obtener un mejor rendimiento de las consultas, como se muestra a continuación:

-- 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 --

Uso del grupo de SQL dedicado

El grupo SQL dedicado admite tablas administradas y una memoria caché jerárquica para rendimiento en memoria. Puede importar macrodatos con consultas T-SQL simples y, después, use la potencia del motor de consultas distribuidas para realizar un análisis de alto rendimiento.

La manera más sencilla y rápida de cargar datos desde el almacenamiento en un grupo de SQL dedicado es usar el comando COPY en T-SQL, que puede leer archivos CSV, Parquet y ORC. Como en la consulta de ejemplo siguiente, use el comando COPY para cargar las filas NDJSON en una estructura 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

Una vez que tenga las filas JSON en la tabla StagingPatient anterior, puede crear diferentes formatos tabulares de los datos mediante la función OPENJSON y almacenar los resultados en tablas. Esta es una consulta SQL de ejemplo para crear una Patient tabla extrayendo algunos campos del 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

Pasos siguientes

En este artículo, ha aprendido tres maneras diferentes de copiar los datos de FHIR en Synapse.

A continuación, puede obtener información sobre cómo puede desidentificar los datos de FHIR al exportarlos a Synapse con el fin de proteger phi.

FHIR® es una marca registrada de HL7 y se usa con su permiso.