Compartir a través de


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 FHIR a la herramienta del sistema operativo del agente de sincronización de Synapse

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.

FHIR to Synapse Sync Agent es un proyecto de Microsoft OSS publicado bajo la licencia MIT. Es una función de Azure que extrae datos de un servidor FHIR mediante las API de recursos de FHIR, la convierte en archivos Jerárquicos de Parquet y la 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 datos completos 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 FHIR a la herramienta del generador de canalizaciones de 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 FHIR a CDM es un proyecto de OSS de Microsoft publicado bajo la licencia MIT. Es una herramienta para generar una canalización de ADF para copiar una instantánea de datos desde 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 aplanar 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 una carpeta DE CDM a un grupo de SQL dedicado de Synapse.

Esta solución 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 a 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 Gen 2) en NDJSON formato. A continuación, cargue 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 FHIR

El servidor FHIR de Azure Health Data Services implementa la $export operación definida por la especificación de FHIR para exportar todos los datos de FHIR 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) ir a Control de acceso en la cuenta de almacenamiento y agregar 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 llamada anterior $export para restringir los recursos que desea exportar. Por ejemplo, la siguiente llamada exporta solo Patientlos recursos , MedicationRequesty 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. Cree un servicio de 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 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 diferentes: grupo de SQL sin servidor y 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 para configurar o clústeres para mantener. 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 OPENROWSET función accede a los archivos de Azure Storage y OPENJSON analiza el 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 indica 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 comandoCOPY en T-SQL, que puede leer archivos CSV, Parquet y ORC. Como en la consulta de ejemplo siguiente, use el COPY comando para cargar las NDJSON filas 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 anterior StagingPatient , puede crear diferentes formatos tabulares de los datos mediante la OPENJSON función y almacenar los resultados en tablas. Esta es una consulta SQL de ejemplo para crear una Patient tabla mediante la extracción de 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 para proteger la PHI.

Nota:

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