BigQuery로 FHIR 리소스 일괄 내보내기

이 페이지에서는 탐색 및 분석을 위해 FHIR 리소스를 BigQuery로 일괄 내보내는 방법을 설명합니다. 내보내기 작업은 FHIR 저장소의 각 FHIR 리소스 유형에 대해 하나의 BigQuery 테이블을 만듭니다.

쿼리 성능을 개선하고 비용을 줄이려면 FHIR 리소스를 파티션을 나눈 테이블로 내보내는 것이 좋습니다. 자세한 내용은 파티션을 나눈 테이블로 FHIR 리소스 내보내기를 참조하세요.

일정에 따라 FHIR 리소스를 내보내는 경우 데이터를 증분식으로 내보내는 것이 좋습니다. 자세한 내용은 증분 내보내기를 참고하세요.

BigQuery 권한 설정

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

내보내기 동작 이해

내보내기 작업의 동작은 다음에 따라 달라집니다.

  • 대상 테이블이 존재하는지 여부
  • force 필드 설정 여부
  • WriteDisposition에 enum을 지정할지 여부. enum을 지정하는 경우 force 필드를 설정하지 마세요.

각 경우의 동작은 다음과 같습니다.

  • 대상 테이블이 있고 forcetrue로 설정된 경우: 내보내기 작업이 기존 테이블을 덮어씁니다.
  • 대상 테이블이 있고 forcefalse로 설정된 경우: 오류가 발생합니다.
  • 대상 테이블이 없음: 내보내기 작업은 force 필드 지정 여부에 관계없이 새 테이블을 만듭니다.
  • 대상 테이블이 있고 WriteDispositionWRITE_TRUNCATE 또는 WRITE_APPEND로 설정하면 오류를 반환하는 대신 내보내기 작업이 성공합니다.

이 작업은 FHIR 저장소의 각 리소스 유형에 대해 하나의 BigQuery 테이블을 출력합니다.

FHIR 리소스 일괄 내보내기

다음 샘플은 FHIR 리소스를 BigQuery 테이블로 내보내는 방법을 보여줍니다.

BigQuery 대상을 지정할 때는 정규화된 URI를 사용합니다.

bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID

콘솔

Google Cloud 콘솔을 사용하여 FHIR 리소스를 BigQuery로 내보내려면 다음 단계를 수행합니다.

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

    데이터 세트로 이동

  2. 내보낼 데이터가 있는 FHIR 저장소가 위치한 데이터 세트를 클릭합니다.

  3. FHIR 저장소와 동일한 행에서 조치 목록을 열고 내보내기를 선택합니다.

  4. 표시되는 FHIR 리소스 내보내기 페이지에서 대상 선택 섹션을 찾습니다. BigQuery 테이블을 선택합니다.

  5. 대상 테이블 쓰기 처리 섹션에서 다음 옵션 중 하나를 선택하여 내보내기 작업의 동작을 결정합니다.

    • 대상 테이블이 비어 있는 경우에만 데이터 내보내기: WriteDisposition에서 WRITE_EMPTY enum을 선택하는 것과 동일합니다.
    • 대상 테이블에 데이터 추가: WriteDisposition에서 WRITE_APPEND enum을 선택하는 것과 동일합니다.
    • FHIR 리소스를 작성하기 전에 대상 테이블의 모든 기존 데이터 삭제: WriteDisposition에서 WRITE_TRUNCATE enum을 선택하는 것과 동일합니다.
  6. FHIR 내보내기 구성 섹션에서 찾아보기를 클릭하여 BigQuery 프로젝트 및 데이터 세트를 선택하세요.

  7. 스키마 유형 드롭다운에서 BigQuery 테이블의 출력 스키마를 선택합니다. 사용 가능한 스키마는 다음과 같습니다.

    • 분석. FHIR 기반 SQL 문서를 기반으로 하는 스키마. BigQuery는 테이블당 10,000개의 열만 허용하므로 Parameters.parameter.resource, Bundle.entry.resource, Bundle.entry.response.outcome 필드의 스키마는 생성되지 않습니다.
    • 분석 V2. 분석 스키마와 유사한 스키마로, 다음이 지원됩니다. 분석 V2 스키마는 분석 스키마보다 대상 테이블에서 더 많은 공간을 사용합니다.

  8. 재귀 구조 깊이 슬라이더에서 깊이 수준을 선택하여 출력 스키마에서 모든 재귀 구조의 깊이를 설정합니다. 기본적으로 재귀 값은 2입니다.

    자세한 내용은 recursiveStructureDepth를 참조하세요.

  9. 내보내기를 클릭하여 FHIR 리소스를 BigQuery로 내보냅니다.

  10. 작업 상태를 추적하려면 작업 탭을 클릭합니다. 작업이 완료되면 다음과 같은 표시가 나타납니다.
    • 장기 실행 작업 상태 섹션의 확인 제목 아래에 녹색 체크표시가 있습니다.
    • 개요 섹션에 작업 ID와 같은 행에 녹색 체크표시와 확인 표시기가 있습니다.
    오류가 발생하면 작업을 클릭한 다음 Cloud Logging에서 세부정보 보기를 클릭합니다.

gcloud

FHIR 리소스를 BigQuery로 내보내려면 gcloud healthcare fhir-stores export bq 명령어를 실행합니다.

  1. FHIR 리소스를 내보냅니다:

    아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • LOCATION: 데이터 세트 위치
    • DATASET_ID: FHIR 저장소의 상위 데이터 세트
    • FHIR_STORE_ID: FHIR 저장소 ID
    • BIGQUERY_DATASET_ID: FHIR 리소스를 내보내는 기존 BigQuery 데이터 세트의 이름
    • SCHEMA_TYPE: SchemaType의 값. 다음 값 중 하나를 사용합니다.
      • analytics. FHIR 기반 SQL 문서를 기반으로 하는 스키마. BigQuery는 테이블당 10,000개의 열만 허용하므로 Parameters.parameter.resource, Bundle.entry.resource, Bundle.entry.response.outcome 필드의 스키마는 생성되지 않습니다.
      • analytics_v2. analytics와 유사한 스키마로서 다음에 대한 지원이 추가됨

        analytics-v2analytics보다 대상 테이블에서 더 많은 공간을 사용합니다.

    • WRITE_DISPOSITION: WriteDisposition의 값. 다음 값 중 하나를 사용합니다.
      • write-empty. 대상 BigQuery 테이블이 비어 있는 경우에만 데이터를 내보냄
      • write-truncate. FHIR 리소스를 작성하기 전에 BigQuery 테이블에서 기존 데이터 모두 삭제
      • write-append. BigQuery 테이블에 데이터 추가
    • FHIR_RESOURCE_TYPE: 선택적 필드. 이러한 유형의 FHIR 리소스만 내보내려면 쉼표로 구분된 하나 이상의 FHIR 리소스 유형을 지정하세요.
    • SINCE_TIMESTAMP: 선택적 필드. 특정 시간 이후에 업데이트된 FHIR 리소스만 내보내려면 YYYY-MM-DDThh:mm:ss.sss+zz:zz 형식으로 값을 지정합니다. 시간을 초 단위로 지정하고 시간대를 포함합니다. 예를 들어 2015-02-07T13:28:17.239+02:002017-01-01T00:00:00Z는 유효한 시간입니다.

    다음 명령어를 실행합니다.

    Linux, macOS 또는 Cloud Shell

    gcloud healthcare fhir-stores export bq FHIR_STORE_ID \
      --location=LOCATION \
      --dataset=DATASET_ID \
      --bq-dataset=bq://PROJECT_ID.BIGQUERY_DATASET_ID \
      --schema-type=SCHEMA_TYPE \
      --write-disposition=WRITE_DISPOSITION \
      --resource-type=FHIR_RESOURCE_TYPE \
      --since=SINCE_TIMESTAMP

    Windows(PowerShell)

    gcloud healthcare fhir-stores export bq FHIR_STORE_ID `
      --location=LOCATION `
      --dataset=DATASET_ID `
      --bq-dataset=bq://PROJECT_ID.BIGQUERY_DATASET_ID `
      --schema-type=SCHEMA_TYPE `
      --write-disposition=WRITE_DISPOSITION `
      --resource-type=FHIR_RESOURCE_TYPE `
      --since=SINCE_TIMESTAMP

    Windows(cmd.exe)

    gcloud healthcare fhir-stores export bq FHIR_STORE_ID ^
      --location=LOCATION ^
      --dataset=DATASET_ID ^
      --bq-dataset=bq://PROJECT_ID.BIGQUERY_DATASET_ID ^
      --schema-type=SCHEMA_TYPE ^
      --write-disposition=WRITE_DISPOSITION ^
      --resource-type=FHIR_RESOURCE_TYPE ^
      --since=SINCE_TIMESTAMP
    응답은 다음과 같습니다. 응답에는 장기 실행 작업의 식별자가 포함됩니다. 메서드 호출을 완료하는 데 상당한 시간이 걸릴 수 있는 장기 실행 작업은 반환됩니다. 이 명령어는 장기 실행 작업을 폴링한 후 내보내기가 완료되면 name 필드에 작업 이름을 출력합니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

    응답

    Request issued for: [FHIR_STORE_ID]
    Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete...⠏
    name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
    

  2. 작업에 대한 세부정보를 보려면 gcloud healthcare operations describe를 실행하고 응답에서 OPERATION_ID를 제공합니다.

    아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DATASET_ID: 데이터 세트 ID
    • LOCATION: 데이터 세트 위치
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    다음 명령어를 실행합니다.

    Linux, macOS 또는 Cloud Shell

    gcloud healthcare operations describe OPERATION_ID \
        --project=PROJECT_ID \
        --dataset=DATASET_ID \
        --location=LOCATION

    Windows(PowerShell)

    gcloud healthcare operations describe OPERATION_ID `
        --project=PROJECT_ID `
        --dataset=DATASET_ID `
        --location=LOCATION

    Windows(cmd.exe)

    gcloud healthcare operations describe OPERATION_ID ^
        --project=PROJECT_ID ^
        --dataset=DATASET_ID ^
        --location=LOCATION

    다음과 비슷한 응답이 표시됩니다.

    응답

    done: true
    // If there were any errors, an `error` field displays instead of a `response` field.
    // See Troubleshooting long-running operations for a list of response codes.
    error: ERROR
      code: ERROR_CODE
      message: DESCRIPTION
    metadata:
      '@type': 'type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata'
      apiMethodName: 'google.cloud.healthcare.v1.fhir.FhirStoreService.ExportResources_bq'
      counter:
        success: 'SUCCESS_COUNT'
        // If there were any failures, they display in the `failure` field.
        failure: 'FAILURE_COUNT'
      createTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ'
      endTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ'
      logsUrl: https://console.cloud.google.com/CLOUD_LOGGING_URL
    name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
    // The `response` field only displays if there were no errors.
    response:
      '@type': 'type.googleapis.com/google.cloud.healthcare.v1.fhir.ExportResourcesResponse'
    

REST

FHIR 리소스를 BigQuery로 내보내려면 projects.locations.datasets.fhirStores.export 메서드를 사용합니다.

  1. FHIR 리소스를 내보냅니다:

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • LOCATION: 데이터 세트 위치
    • DATASET_ID: FHIR 저장소의 상위 데이터 세트
    • FHIR_STORE_ID: FHIR 저장소 ID
    • BIGQUERY_DATASET_ID: FHIR 리소스를 내보내는 기존 BigQuery 데이터 세트의 이름
    • SCHEMA_TYPE: SchemaType의 값. 다음 값 중 하나를 사용합니다.
      • ANALYTICS. FHIR 기반 SQL 문서를 기반으로 하는 스키마. BigQuery는 테이블당 10,000개의 열만 허용하므로 Parameters.parameter.resource, Bundle.entry.resource, Bundle.entry.response.outcome 필드의 스키마는 생성되지 않습니다.
      • ANALYTICS_V2. ANALYTICS와 유사한 스키마로서 다음에 대한 지원이 추가됨

        ANALYTICS_V2ANALYTICS보다 대상 테이블에서 더 많은 공간을 사용합니다

        .
    • WRITE_DISPOSITION: WriteDisposition의 값. 다음 값 중 하나를 사용합니다.
      • WRITE_EMPTY. 대상 BigQuery 테이블이 비어 있는 경우에만 데이터를 내보냄
      • WRITE_TRUNCATE. FHIR 리소스를 작성하기 전에 BigQuery 테이블에서 기존 데이터 모두 삭제
      • WRITE_APPEND. BigQuery 테이블에 데이터 추가
    • FHIR_RESOURCE_TYPE: 선택적 필드. 이러한 유형의 FHIR 리소스만 내보내려면 쉼표로 구분된 하나 이상의 FHIR 리소스 유형을 지정하세요.
    • SINCE_TIMESTAMP: 선택적 필드. 특정 시간 이후에 업데이트된 FHIR 리소스만 내보내려면 YYYY-MM-DDThh:mm:ss.sss+zz:zz 형식으로 값을 지정합니다. 시간을 초 단위로 지정하고 시간대를 포함합니다. 예를 들어 2015-02-07T13:28:17.239+02:002017-01-01T00:00:00Z는 유효한 시간입니다.

    JSON 요청 본문:

    {
      "bigqueryDestination": {
        "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID",
        "schemaConfig": {
          "schemaType": "SCHEMA_TYPE",
        },
        "writeDisposition": "WRITE_DISPOSITION"
      },
      "_type": "FHIR_RESOURCE_TYPE",
      "_since": "SINCE_TIMESTAMP"
    }
    

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    cat > request.json << 'EOF'
    {
      "bigqueryDestination": {
        "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID",
        "schemaConfig": {
          "schemaType": "SCHEMA_TYPE",
        },
        "writeDisposition": "WRITE_DISPOSITION"
      },
      "_type": "FHIR_RESOURCE_TYPE",
      "_since": "SINCE_TIMESTAMP"
    }
    EOF

    그런 후 다음 명령어를 실행하여 REST 요청을 전송합니다.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:export"

    PowerShell

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    @'
    {
      "bigqueryDestination": {
        "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID",
        "schemaConfig": {
          "schemaType": "SCHEMA_TYPE",
        },
        "writeDisposition": "WRITE_DISPOSITION"
      },
      "_type": "FHIR_RESOURCE_TYPE",
      "_since": "SINCE_TIMESTAMP"
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    그런 후 다음 명령어를 실행하여 REST 요청을 전송합니다.

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:export" | Select-Object -Expand Content

    API 탐색기

    요청 본문을 복사하고 메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 요청 본문을 이 도구에 붙여넣고 다른 필수 필드를 입력한 후 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에는 장기 실행 작업(LRO)의 식별자가 포함됩니다. 장기 실행 작업은 메서드 호출을 완료하는 데 추가 시간이 걸릴 수 있는 경우에 반환됩니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

  2. projects.locations.datasets.operations.get 메서드를 사용하여 장기 실행 작업의 상태를 가져옵니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DATASET_ID: 데이터 세트 ID
    • LOCATION: 데이터 세트 위치
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    다음 명령어를 실행합니다.

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에 "done": true가 포함되었으면 장기 실행 작업이 완료된 것입니다.

파티션을 나눈 테이블로 FHIR 리소스 내보내기

FHIR 리소스를 BigQuery 파티션을 나눈 테이블로 내보내려면 FHIR 저장소의 lastUpdatedPartitionConfig 필드에서 TimePartitioning 열거형을 설정하세요.

파티션을 나눈 테이블은 BigQuery 시간 단위로 파티션을 나눈 테이블처럼 작동합니다. 파티션을 나눈 테이블에는 FHIR 리소스의 meta.lastUpdated 필드에서 생성된 meta.lastUpdated 열과 중복되는 lastUpdated라는 추가 열이 있습니다. BigQuery는 lastUpdated 열을 사용하여 시간, 일, 월, 연도를 기준으로 테이블의 파티션을 나눕니다.

파티션 세부사항을 선택하는 방법에 대한 권장사항은 일, 시간, 월, 연도별 파티션 나누기 선택을 참조하세요.

파티션을 나누지 않은 기존 BigQuery 테이블은 파티션을 나눈 테이블로 변환할 수 없습니다. 환자 리소스 변경사항을 파티션을 나누지 않은 Patients 테이블로 내보낸 다음 나중에 동일한 BigQuery 데이터 세트로 내보내는 테이블 파티션 나누기를 사용하여 새 FHIR 저장소를 만들어도, Cloud Healthcare API는 파티션을 나누지 않은 Patients 테이블로 여전히 데이터를 내보냅니다. 파티션을 나눈 테이블 사용을 시작하려면 기존 Patients 테이블을 삭제하거나 다른 BigQuery 데이터 세트를 사용하세요.

기존 FHIR 저장소 구성에 파티션 나누기를 추가하는 경우에도 파티션을 나누지 않은 기존 테이블로 계속 내보낼 수 있습니다. 하지만 파티션 나누기는 새 테이블에만 적용됩니다.

다음 샘플은 FHIR 리소스를 BigQuery 파티션을 나눈 테이블로 내보내는 방법을 보여줍니다.

콘솔

Google Cloud 콘솔과 gcloud CLI는 이 작업을 지원하지 않습니다. 대신 curl, PowerShell 또는 사용자가 선호하는 언어를 사용합니다.

gcloud

Google Cloud 콘솔과 gcloud CLI는 이 작업을 지원하지 않습니다. 대신 curl, PowerShell 또는 사용자가 선호하는 언어를 사용합니다.

REST

FHIR 리소스를 BigQuery 파티션을 나눈 테이블로 내보내려면 projects.locations.datasets.fhirStores.export 메서드를 사용합니다.

  1. FHIR 리소스를 내보냅니다:

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • LOCATION: 데이터 세트 위치
    • DATASET_ID: FHIR 저장소의 상위 데이터 세트
    • FHIR_STORE_ID: FHIR 저장소 ID
    • BIGQUERY_DATASET_ID: FHIR 리소스를 내보내는 기존 BigQuery 데이터 세트의 이름
    • SCHEMA_TYPE: SchemaType의 값. 다음 값 중 하나를 사용합니다.
      • ANALYTICS. FHIR 기반 SQL 문서를 기반으로 하는 스키마. BigQuery는 테이블당 10,000개의 열만 허용하므로 Parameters.parameter.resource, Bundle.entry.resource, Bundle.entry.response.outcome 필드의 스키마는 생성되지 않습니다.
      • ANALYTICS_V2. ANALYTICS와 유사한 스키마로서 다음에 대한 지원이 추가됨

        ANALYTICS_V2ANALYTICS보다 대상 테이블에서 더 많은 공간을 사용합니다

        .
    • TIME_PARTITION_TYPE: 내보낸 FHIR 리소스를 분할할 세부사항. 다음 값 중 하나를 사용합니다.
      • HOUR: 시간별로 데이터 파티션 나누기
      • DAY: 일별로 데이터 파티션 나누기
      • MONTH: 월별로 데이터 파티션 나누기
      • YEAR: 연도별로 데이터 파티션 나누기
    • WRITE_DISPOSITION: WriteDisposition의 값. 다음 값 중 하나를 사용합니다.
      • WRITE_EMPTY: BigQuery 테이블이 비어 있는 경우에만 데이터를 내보냅니다.
      • WRITE_TRUNCATE: DICOM 인스턴스를 작성하기 전 BigQuery 테이블의 모든 기존 데이터를 삭제합니다.
      • WRITE_APPEND: BigQuery 테이블에 데이터를 추가합니다.

    JSON 요청 본문:

    {
      "bigqueryDestination": {
        "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID",
        "schemaConfig": {
          "schemaType": "SCHEMA_TYPE",
          "lastUpdatedPartitionConfig": {
            "type": "TIME_PARTITION_TYPE"
          }
        },
        "writeDisposition": "WRITE_DISPOSITION"
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    cat > request.json << 'EOF'
    {
      "bigqueryDestination": {
        "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID",
        "schemaConfig": {
          "schemaType": "SCHEMA_TYPE",
          "lastUpdatedPartitionConfig": {
            "type": "TIME_PARTITION_TYPE"
          }
        },
        "writeDisposition": "WRITE_DISPOSITION"
      }
    }
    EOF

    그런 후 다음 명령어를 실행하여 REST 요청을 전송합니다.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:export"

    PowerShell

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    @'
    {
      "bigqueryDestination": {
        "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID",
        "schemaConfig": {
          "schemaType": "SCHEMA_TYPE",
          "lastUpdatedPartitionConfig": {
            "type": "TIME_PARTITION_TYPE"
          }
        },
        "writeDisposition": "WRITE_DISPOSITION"
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    그런 후 다음 명령어를 실행하여 REST 요청을 전송합니다.

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:export" | Select-Object -Expand Content

    API 탐색기

    요청 본문을 복사하고 메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 요청 본문을 이 도구에 붙여넣고 다른 필수 필드를 입력한 후 실행을 클릭합니다.

    다음과 비슷한 JSON 응답이 표시됩니다.

  2. projects.locations.datasets.operations.get 메서드를 사용하여 장기 실행 작업의 상태를 가져옵니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DATASET_ID: 데이터 세트 ID
    • LOCATION: 데이터 세트 위치
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    다음 명령어를 실행합니다.

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에 "done": true가 포함되었으면 장기 실행 작업이 완료된 것입니다.

파티션을 나눈 테이블 쿼리

파티션을 나눈 테이블을 쿼리할 때 쿼리 비용을 줄이려면 WHERE 절을 사용하여 시간 단위로 필터링합니다.

예를 들어 PartitionType enum을 DAY로 설정했다고 가정해 보겠습니다. 특정 날짜에 업데이트된 환자 리소스에 대해 Patients 테이블을 쿼리하려면 다음 쿼리를 실행합니다.

SELECT * FROM `PROJECT_ID.BIGQUERY_DATASET.Patients`
  WHERE DATE(lastUpdated) = 'YYYY-MM-DD'

증분 내보내기

타임스탬프를 지정하여 이전에 성공적으로 내보낸 이후 FHIR 스토어에 추가된 FHIR 리소스만 내보낼 수 있습니다. 이렇게 하면 성능이 개선되고 전체 FHIR 스토어를 다시 내보내는 비용이 들지 않으며 내보낸 데이터가 항상 최신 상태로 유지됩니다.

fhirStores.export를 호출할 때 _since 필드에 타임스탬프를 지정합니다.

BigQuery에서 FHIR 데이터 쿼리 및 분석

BigQuery로 FHIR 리소스를 내보낸 후 내보낸 데이터를 쿼리하고 분석하는 방법에 대한 자세한 내용은 BigQuery에서 FHIR 데이터 분석 솔루션을 참조하세요. 솔루션은 FHIR의 Synthea™ 생성 합성 데이터 공개 데이터 세트를 참조합니다. 이 데이터 세트는 Synthea™에서 생성한 100만 개 이상의 합성 환자 기록을 FHIR 형식으로 호스팅합니다.

FHIR 내보내기 요청 문제 해결

FHIR 내보내기 요청 중에 오류가 발생하면 오류가 Cloud Logging에 기록됩니다. 자세한 내용은 Cloud Logging에서 오류 로그 보기를 참조하세요.

전체 작업이 오류를 반환하는 경우 장기 실행 작업 문제 해결을 참조하세요.

NULLABLE에서 REPEATED로 열을 변환할 수 없음

이 오류는 반복 확장으로 인해 발생합니다. 이 오류를 해결하려면 ANALYTICS_V2 스키마 유형을 사용합니다. ANALYTICS_V2를 사용 중이면 두 확장 프로그램 간에 충돌이 발생하거나 확장 프로그램과 다른 필드 간에 충돌이 발생할 수 있습니다.

열 이름은 확장 URL에서 마지막 / 문자 다음에 오는 텍스트에서 생성됩니다. 확장 프로그램 URL이 /resource_field name 같은 값으로 끝나면 충돌이 발생할 수 있습니다. \

이 오류가 다시 발생하지 않도록 하려면 필드 이름이 작성하려는 리소스 필드와 동일한 경우 확장 프로그램을 사용하지 마세요.

다음 단계