BigQuery로 FHIR 리소스 변경사항 스트리밍

이 페이지에서는 FHIR 저장소에서 FHIR 리소스가 생성, 업데이트, 패치 또는 삭제될 때마다 BigQuery로 리소스 변경사항을 내보내도록 Cloud Healthcare API를 구성하는 방법을 설명합니다.

BigQuery 스트리밍을 사용하면 거의 실시간으로 FHIR 저장소의 데이터를 BigQuery 데이터 세트와 동기화할 수 있습니다. 데이터를 분석하려고 할 때마다 FHIR 저장소의 최신 버전을 BigQuery로 내보내지 않고도 FHIR 데이터에 대해 복잡한 쿼리를 수행할 수 있습니다.

BigQuery 권한 설정

FHIR 리소스 변경사항을 BigQuery로 스트리밍하려면 Cloud Healthcare 서비스 에이전트 서비스 계정에 추가 권한을 부여해야 합니다. 자세한 내용은 FHIR 저장소 BigQuery 권한을 참조하세요.

FHIR 리소스 변경사항 스트리밍

다음 샘플은 FHIR 리소스 변경사항을 BigQuery 데이터 세트로 스트리밍하는 방법을 보여줍니다.

자세한 내용은 FHIR 저장소 리소스의 streamConfigs 필드를 참조하세요.

Console

Cloud Console에서 BigQuery 스트리밍을 구성하려면 다음 단계를 완료합니다.

  1. Cloud Console에서 데이터 세트 페이지로 이동합니다.
    데이터 세트 페이지로 이동

  2. 수정할 FHIR 저장소가 포함된 데이터 세트를 선택합니다.

  3. 데이터 저장소 목록에서 수정할 FHIR 저장소를 선택합니다.

  4. 저장소의 구성을 수정하려면 FHIR 저장소 구성 수정 버튼을 클릭합니다.

    FHIR 저장소의 구성 옵션에 대한 자세한 내용은 FHIR 저장소 만들기를 참조하세요.

  5. 저장소의 FHIR 리소스를 생성, 업데이트, 패치 또는 삭제할 때마다 BigQuery로 리소스 변경사항을 내보내려면 새 스트리밍 구성 추가를 클릭합니다.

  6. 데이터 세트 목록에서 리소스 변경사항이 스트리밍될 BigQuery 데이터 세트를 선택합니다.

  7. 출력 스키마의 모든 재귀 구조에 대해 깊이를 설정하려면 재귀 구조 깊이 슬라이더에서 관련 깊이를 클릭합니다. 기본적으로 재귀 깊이는 2입니다.

  8. 특정 리소스 유형의 리소스 변경사항만 내보내려면 FHIR 리소스 유형 선택 목록에서 리소스 유형을 선택합니다.

  9. 완료를 클릭하여 스트리밍 구성을 저장합니다.

API

curl

BigQuery 스트리밍을 사용 설정하려면 FHIR 저장소의 streamConfigs 필드를 업데이트해야 합니다. FHIR 저장소를 업데이트하려면 다음 정보를 사용하여 PATCH 요청을 수행합니다.

  • 상위 데이터 세트
  • FHIR 저장소
  • BigQuery 데이터 세트
  • BigQuery 프로젝트
  • 업데이트 마스크
  • 액세스 토큰

다음 샘플은 curl을 사용하는 PATCH 요청을 보여줍니다.

curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'streamConfigs': [
        {
          'bigqueryDestination': {
            'datasetUri': 'bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID',
            'schemaConfig': {
              'schemaType': 'ANALYTICS'
            }
          }
        }
      ]
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?updateMask=streamConfigs"

요청이 성공하면 서버가 JSON 형식으로 응답을 반환합니다.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID",
  'streamConfigs': [
   {
     'bigqueryDestination': {
       'datasetUri': 'bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID',
       'schemaConfig': {
         'schemaType': 'ANALYTICS'
       }
     }
   }
  ]
}

BigQuery 스트리밍을 구성하면 Cloud Healthcare API는 FHIR 리소스가 생성, 업데이트, 패치 또는 삭제될 때마다 BigQuery 테이블에 새 행을 삽입합니다.

PowerShell

BigQuery 스트리밍을 사용 설정하려면 FHIR 저장소의 streamConfigs 필드를 업데이트해야 합니다. FHIR 저장소를 업데이트하려면 다음 정보를 사용하여 PATCH 요청을 수행합니다.

  • 상위 데이터 세트
  • FHIR 저장소
  • BigQuery 데이터 세트
  • BigQuery 프로젝트
  • 업데이트 마스크
  • 액세스 토큰

다음 샘플은 Windows PowerShell을 사용한 PATCH 요청을 보여줍니다.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Patch `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
      'streamConfigs': [
        {
          'bigqueryDestination': {
            'datasetUri': 'bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID',
            'schemaConfig': {
              'schemaType': 'ANALYTICS'
            }
          }
        }
      ]
  }" `
  -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?updateMask=streamConfigs" | Select-Object -Expand Content

요청이 성공하면 서버가 JSON 형식으로 응답을 반환합니다.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID",
  'streamConfigs': [
   {
     'bigqueryDestination': {
       'datasetUri': 'bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID',
       'schemaConfig': {
         'schemaType': 'ANALYTICS'
       }
     }
   }
  ]
}

BigQuery 스트리밍을 구성하면 Cloud Healthcare API는 FHIR 리소스가 생성, 업데이트, 패치 또는 삭제될 때마다 BigQuery 테이블에 새 행을 삽입합니다.

FHIR 스트리밍 문제 해결

리소스 변경사항이 BigQuery로 전송될 때 오류가 발생하면 오류가 Cloud Logging에 로깅됩니다. 자세한 내용은 Cloud Logging에서 오류 로그 보기를 참조하세요.

FHIR 리소스 뷰 만들기 누락

기본적으로 FHIR 리소스 변경사항을 BigQuery로 스트리밍하면 스트리밍되는 각 리소스에 대해 가 생성됩니다. 이 뷰에는 다음과 같은 속성이 있습니다.

  • BigQuery 데이터 세트의 리소스 및 리소스 테이블과 같은 이름
  • 모든 이전 버전이 아닌 현재 리소스 버전만 포함

FHIR 리소스를 스트리밍하기 전에 FHIR 리소스를 BigQuery로 일괄 내보내기하는 경우 BigQuery는 FHIR 리소스에 대한 뷰를 만들지 않습니다.

예를 들어 다음과 같은 상황에서는 Encounter 리소스에 대한 뷰가 표시되지 않을 수 있습니다.

  1. FHIR 저장소에서 BigQuery 스트리밍을 구성한 다음 REST API를 사용하여 환자 리소스를 만듭니다.

    BigQuery는 환자 리소스의 테이블과 뷰를 만듭니다.

  2. Encounter 리소스를 이전 단계와 동일한 BigQuery 데이터 세트로 일괄적으로 내보냅니다.

    BigQuery는 Encounter 리소스의 테이블을 만듭니다.

  3. REST API를 사용하여 Encounter 리소스를 만듭니다.

    이 단계가 끝나면 Encounter 리소스에 대한 BigQuery 뷰가 생성되지 않습니다.

이 문제를 해결하려면 RESOURCE_TABLEencounter로 바꿔 다음 쿼리를 실행합니다.

SELECT p.*
FROM (
  SELECT id, MAX(meta.lastUpdated) AS lastUpdated
  FROM `PROJECT_ID.BIGQUERY_DATASET_ID.RESOURCE_TABLE`
  GROUP BY id) AS latest
JOIN
  `PROJECT_ID.BIGQUERY_DATASET_ID.RESOURCE_TABLE` AS p
ON
  p.id=latest.id
  AND p.meta.lastUpdated=latest.lastUpdated
WHERE
  NOT EXISTS (
  SELECT *
  FROM UNNEST(p.meta.tag)
  WHERE code = 'DELETE');

다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
  • BIGQUERY_DATASET_ID: FHIR 리소스를 일괄적으로 내보낸 BigQuery 데이터 세트의 ID입니다.
  • RESOURCE_TABLE: 뷰를 만들려는 FHIR 리소스에 해당하는 테이블의 이름입니다.

쿼리를 실행한 후 FHIR 리소스에 대한 변경사항을 계속 스트리밍할 수 있으며 이에 따라 뷰가 업데이트됩니다.

다음 단계

FHIR 리소스 변경사항 스트리밍 사용 사례에 대한 튜토리얼은 BigQuery로 FHIR 리소스 스트리밍 및 동기화를 참조하세요.