Azure API for FHIR에서 Azure Synapse Analytics로 데이터 복사
Important
Azure API for FHIR은 2026년 9월 30일에 사용 중지됩니다. 해당 날짜까지 마이그레이션 전략에 따라 Azure Health Data Services FHIR® 서비스로 전환합니다. Azure API for FHIR의 사용 중지로 인해 2025년 4월 1일부터 신규 배포가 허용되지 않습니다. Azure Health Data Services FHIR 서비스는 고객이 다른 Azure 서비스에 통합하여 FHIR, DICOM 및 MedTech 서비스를 관리할 수 있도록 하는 Azure API for FHIR의 진화된 버전입니다.
이 문서에서는 데이터 통합, 엔터프라이즈 데이터 웨어하우징 및 빅 데이터 분석을 통합하는 무제한 분석 서비스인 Azure API for FHIR®에서 Azure Synapse Analytics로 데이터를 복사하는 세 가지 방법을 알아봅니다. 다음은 다음과 같습니다.
- FHIR을 사용하여 Synapse Sync Agent OSS 도구
- FHIR을 사용하여 CDM 파이프라인 생성기 OSS 도구
- T-SQL을 사용하여 Synapse에 데이터 사용
$export
및 로드
FHIR을 사용하여 Synapse Sync Agent OSS 도구
참고 항목
FHIR에서 Synapse 동기화 에이전트로의 FHIR은 MIT 라이선스에 따라 릴리스된 오픈 소스 도구이며 Azure 서비스용 Microsoft SLA에서 다루지 않습니다.
FHIR-Synapse 동기화 에이전트는 MIT 라이선스에 따라 릴리스된 Microsoft OSS 프로젝트입니다. FHIR 리소스 API를 사용하여 FHIR 서버에서 데이터를 추출하고, 계층적 Parquet 파일로 변환하고, Azure Data Lake에 거의 실시간으로 쓰는 Azure 함수입니다. 또한 Parquet 파일을 가리키는 Synapse 서버리스 SQL 풀에서 외부 테이블 및 뷰를 만드는 스크립트도 포함되어 있습니다.
이 솔루션을 사용하면 Synapse Studio, SSMS 및 Power BI와 같은 도구를 사용하여 전체 FHIR 데이터에 대해 쿼리할 수 있습니다. Synapse Spark 풀에서 직접 Parquet 파일에 액세스할 수도 있습니다. 모든 FHIR 데이터에 거의 실시간으로 액세스하고 다운스트림 시스템으로의 사용자 지정 변환을 지연하려는 경우 이 솔루션을 고려해야 합니다.
설치 및 사용 지침은 OSS 설명서를 따릅니다.
FHIR에서 CDM 파이프라인 생성기 OSS 도구 사용
참고 항목
FHIR-CDM 파이프라인 생성기는 MIT 라이선스에 따라 릴리스된 오픈 소스 도구이며 Azure 서비스용 Microsoft SLA에서 다루지 않습니다.
FHIR-CDM 파이프라인 생성기는 MIT 라이선스에 따라 릴리스된 Microsoft OSS 프로젝트입니다. API를 사용하여 $export
FHIR 서버에서 데이터의 스냅샷을 복사하고, csv 형식으로 변환하고, Azure Data Lake Storage Gen 2의 CDM 폴더에 쓰기 위한 ADF 파이프라인을 생성하는 도구입니다. 이 도구를 사용하려면 FHIR 리소스 및 필드를 테이블로 프로젝션하고 평면화하기 위한 지침이 포함된 사용자가 만든 구성 파일이 필요합니다. Synapse 작업 영역에서 다운스트림 파이프라인을 만드는 지침을 따라 CDM 폴더에서 Synapse 전용 SQL 풀로 데이터를 이동할 수도 있습니다.
이 솔루션을 사용하면 데이터를 CDM 폴더에 기록할 때 테이블 형식으로 변환할 수 있습니다. FHIR 데이터를 FHIR 서버에서 추출한 후 사용자 지정 스키마로 변환하려는 경우 이 솔루션을 고려해야 합니다.
설치 및 사용 지침은 OSS 설명서를 따릅니다.
T-SQL을 사용하여 Synapse로 내보낸 데이터 로드
이 방법에서는 FHIR $export
작업을 사용하여 FHIR 리소스를 ADL Gen 2(Azure Data Lake Gen 2) Blob Storage 형식 NDJSON
으로 복사합니다. 그런 다음, T-SQL을 사용하여 Synapse의 서버리스 또는 전용 SQL 풀에 스토리지의 데이터를 로드합니다. Synapse 파이프라인을 사용하여 이러한 단계를 강력한 데이터 이동 파이프라인으로 변환할 수 있습니다.
데이터를 복사하는 데 사용 $export
FHIR 서버에서 구성 $export
Azure API for FHIR은 $export
FHIR 사양에 정의된 작업을 구현하여 FHIR 데이터의 전체 또는 필터링된 하위 집합을 형식으로 NDJSON
내보냅니다. 또한 내보내는 동안 FHIR 데이터를 익명화하기 위해 식별되지 않은 내보내기를 지원합니다.
FHIR 데이터를 Azure Blob Storage로 내보내려면 먼저 스토리지 계정으로 데이터를 내보내도록 FHIR 서버를 구성해야 합니다. (1) 관리 ID를 사용하도록 설정하고, (2) 스토리지 계정에서 Access Control로 이동하여 역할 할당을 추가해야 합니다. (3) 스토리지 계정을 $export
선택합니다. 자세한 단계별 지침은 여기에서 확인할 수 있습니다.
데이터를 모든 종류의 Azure Storage 계정으로 내보내도록 서버를 구성할 수 있지만 Synapse와 가장 잘 맞도록 ADL Gen 2로 내보내는 것이 좋습니다.
명령 사용 $export
FHIR 서버를 구성한 후 설명서에 따라 시스템, 환자 또는 그룹 수준에서 FHIR 리소스를 내보낼 수 있습니다. 예를 들어 다음 $export
명령을 사용하여 환자 Group
와 관련된 모든 FHIR 데이터를 내보낼 수 있습니다. 이 명령은 필드에 {{BlobContainer}}
ADL Gen 2 Blob Storage 이름을 지정합니다.
https://{{FHIR service base URL}}/Group/{{GroupId}}/$export?_container={{BlobContainer}}
이전 호출에서 _type
매개 변수를 $export
사용하여 내보낼 리소스를 제한할 수도 있습니다. 예를 들어 다음 호출은 리소스 및 리소스만 Patient
MedicationRequest
내보 Observation
냅니다.
https://{{FHIR service base URL}}/Group/{{GroupId}}/$export?_container={{BlobContainer}}&
_type=Patient,MedicationRequest,Condition
지원되는 다양한 매개 변수에 대한 자세한 내용은 쿼리 매개 변수의 페이지 섹션을 확인 $export
하세요.
분석용 Synapse 사용
Synapse 작업 영역 만들기
Synapse를 사용하기 전에 Synapse 작업 영역이 필요합니다. Azure Portal에서 Azure Synapse Analytics 서비스를 만들어야 합니다. 자세한 단계별 지침은 여기에서 확인할 수 있습니다. 작업 영역을 만들려면 계정이 필요합니다 ADLSGEN2
. Azure Synapse 작업 영역은 이 스토리지 계정을 사용하여 Synapse 작업 영역 데이터를 저장합니다.
작업 영역을 만든 후에는 작업 영역에 로그인하거나 Azure Portal에서 Synapse Studio를 시작하여 Synapse Studio에서 작업 영역을 https://web.azuresynapse.net볼 수 있습니다.
Azure Storage와 Synapse 간에 연결된 서비스 만들기
Synapse에 데이터를 복사하려면 Synapse를 사용하여 데이터를 내보낸 Azure Storage 계정에 연결하는 연결된 서비스를 만들어야 합니다. 자세한 단계별 지침은 여기에서 확인할 수 있습니다.
- Synapse Studio에서 관리 탭으로 이동합니다. 외부 연결에서 연결된 서비스를 선택합니다.
- 새로 만들기를 선택하여 새 연결된 서비스를 추가합니다.
- 목록에서 Azure Data Lake Storage Gen2를 선택하고 계속을 선택합니다.
- 인증 자격 증명을 입력합니다. 작업을 완료하면 만들기를 선택합니다.
이제 ADL Gen 2 스토리지와 Synapse 간에 연결된 서비스가 있으므로 Synapse SQL 풀을 사용하여 FHIR 데이터를 로드하고 분석할 준비가 되었습니다.
서버리스 풀과 전용 SQL 풀 중에서 결정
Azure Synapse Analytics는 서버리스 SQL 풀과 전용 SQL 풀의 두 가지 SQL 풀을 제공합니다. 서버리스 SQL 풀은 리소스 프로비저닝 없이 서버리스 SQL 엔드포인트를 사용하여 Blob Storage에서 직접 데이터를 쿼리하는 유연성을 제공합니다. 전용 SQL 풀은 고성능 및 동시성을 위한 처리 능력을 갖추고 있으며 엔터프라이즈 규모 데이터 웨어하우징 기능에 권장됩니다. 두 SQL 풀에 대한 자세한 내용은 SQL 아키텍처의 Synapse 설명서 페이지를 확인하세요.
서버리스 SQL 풀 사용
서버리스이므로 설치할 인프라나 유지 관리할 클러스터가 없습니다. 작업 영역이 만들어지는 즉시 Synapse Studio에서 데이터 쿼리를 시작할 수 있습니다.
예를 들어 다음 쿼리를 사용하여 선택한 필드를 Patient.ndjson
테이블 형식 구조로 변환할 수 있습니다.
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',
...
)
이전 쿼리에서 함수는 OPENROWSET
Azure Storage의 파일에 액세스하고 OPENJSON
JSON 텍스트를 구문 분석하고 JSON 입력 속성을 행 및 열로 반환합니다. 이 쿼리가 실행될 때마다 서버리스 SQL 풀은 Blob Storage에서 파일을 읽고 JSON을 구문 분석하고 필드를 추출합니다.
다음과 같이 외부 테이블의 Parquet 형식으로 결과를 구체화하여 쿼리 성능을 높일 수도 있습니다.
-- 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 --
전용 SQL 풀 사용
전용 SQL 풀은 메모리 내 성능을 위해 관리 테이블 및 계층적 캐시를 지원합니다. 간단한 T-SQL 쿼리를 사용하여 빅 데이터를 가져온 다음 분산 쿼리 엔진의 기능을 사용하여 고성능 분석을 실행할 수 있습니다.
스토리지에서 전용 SQL 풀로 데이터를 로드하는 가장 간단하고 빠른 방법은 CSV, Parquet 및 ORC 파일을 읽을 수 있는 T-SQL의 명령을 사용하는 COPY
것입니다. 다음 예제 쿼리에서와 같이. 명령을 COPY
사용하여 행을 NDJSON
테이블 형식 구조로 로드합니다.
-- 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
테이블에 JSON 행이 생성되면 함수를 StagingPatient
사용하여 OPENJSON
데이터의 다른 테이블 형식을 만들고 결과를 테이블에 저장할 수 있습니다. 다음은 리소스에서 Patient
몇 가지 필드를 추출하여 테이블을 만드는 Patient
샘플 SQL 쿼리입니다.
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
다음 단계
이 문서에서는 FHIR 데이터를 Synapse에 복사하는 세 가지 방법을 알아보았습니다.
다음으로, PHI(개인 건강 정보)를 보호하기 위해 FHIR 데이터를 Synapse로 내보내는 동안 FHIR 데이터를 식별 해제하는 방법에 대해 알아볼 수 있습니다.
참고 항목
FHIR®은 HL7의 등록 상표이며, HL7의 사용 허가 하에 사용됩니다.