BigQuery로 FHIR 리소스 스트리밍 및 동기화


이 튜토리얼에서는 BigQuery 스트리밍을 사용하여 FHIR 저장소를 BigQuery 데이터 세트와 거의 실시간으로 동기화할 수 있는 시나리오를 설명합니다.

목표

이 튜토리얼에서는 다음 단계를 보여줍니다.

  1. BigQuery 권한을 구성합니다.
  2. FHIR 저장소를 만들고 환자 리소스를 추가합니다.
  3. FHIR 저장소에서 BigQuery 스트리밍을 구성합니다
  4. BigQuery에 대한 스트리밍 구성을 확인합니다.
  5. 기존 FHIR 리소스를 BigQuery로 내보냅니다.
  6. 여러 FHIR 저장소의 리소스를 동일한 BigQuery 데이터 세트로 스트리밍합니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  6. Enable the Cloud Healthcare API.

    Enable the API

  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init

1단계: BigQuery 권한 구성

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

2단계: BigQuery 스트리밍 구성 및 확인

BigQuery에 스트리밍하려면 다음 안내를 따르세요.

FHIR 저장소 만들기 및 환자 리소스 추가하기

FHIR 저장소를 만들고 두 개의 환자 리소스를 추가하려면 다음 단계를 따르세요.

  1. FHIR 저장소를 만듭니다.

    REST

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

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • LOCATION: 데이터 세트 위치
    • DATASET_ID: FHIR 저장소의 상위 데이터 세트
    • FHIR_STORE_ID: FHIR 저장소의 식별자. FHIR 저장소 ID는 다음을 포함해야 합니다.
      • 데이터 세트의 고유 ID
      • 다음으로 구성된 1~256자의 유니코드 문자열:
        • 숫자
        • 문자
        • 밑줄
        • 대시
        • 마침표
    • FHIR_STORE_VERSION: FHIR 저장소의 FHIR 버전입니다. 사용 가능한 옵션은 DSTU2, STU3 또는 R4입니다.

    JSON 요청 본문:

    {
      "version": "FHIR_STORE_VERSION"
    }
    

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

    curl

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

    cat > request.json << 'EOF'
    {
      "version": "FHIR_STORE_VERSION"
    }
    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?fhirStoreId=FHIR_STORE_ID"

    PowerShell

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

    @'
    {
      "version": "FHIR_STORE_VERSION"
    }
    '@  | 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?fhirStoreId=FHIR_STORE_ID" | Select-Object -Expand Content

    API 탐색기

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

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

  2. FHIR 저장소에 첫 번째 환자 리소스를 만듭니다.

    REST

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

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • LOCATION: 데이터 세트 위치
    • DATASET_ID: FHIR 저장소의 상위 데이터 세트
    • FHIR_STORE_ID: FHIR 저장소 ID

    JSON 요청 본문:

    {
      "name": [
        {
          "use": "official",
          "family": "Smith",
          "given": [
            "Darcy"
          ]
        }
      ],
      "gender": "female",
      "birthDate": "1970-01-01",
      "resourceType": "Patient"
    }
    

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

    curl

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

    cat > request.json << 'EOF'
    {
      "name": [
        {
          "use": "official",
          "family": "Smith",
          "given": [
            "Darcy"
          ]
        }
      ],
      "gender": "female",
      "birthDate": "1970-01-01",
      "resourceType": "Patient"
    }
    EOF

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

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

    PowerShell

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

    @'
    {
      "name": [
        {
          "use": "official",
          "family": "Smith",
          "given": [
            "Darcy"
          ]
        }
      ],
      "gender": "female",
      "birthDate": "1970-01-01",
      "resourceType": "Patient"
    }
    '@  | 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/fhir+json" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient" | Select-Object -Expand Content

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

  3. FHIR 저장소에 두 번째 환자 리소스를 만듭니다.

    REST

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

    • PROJECT_ID: Google Cloud 프로젝트 ID
    • LOCATION: 상위 데이터 세트의 위치
    • DATASET_ID: FHIR 저장소의 상위 데이터 세트
    • FHIR_STORE_ID: FHIR 저장소 ID

    JSON 요청 본문:

    {
      "name": [
        {
          "use": "official",
          "family": "Zhang",
          "given": [
            "Michael"
          ]
        }
      ],
      "gender": "male",
      "birthDate": "1980-01-01",
      "resourceType": "Patient"
    }
    

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

    curl

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

    cat > request.json << 'EOF'
    {
      "name": [
        {
          "use": "official",
          "family": "Zhang",
          "given": [
            "Michael"
          ]
        }
      ],
      "gender": "male",
      "birthDate": "1980-01-01",
      "resourceType": "Patient"
    }
    EOF

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

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

    PowerShell

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

    @'
    {
      "name": [
        {
          "use": "official",
          "family": "Zhang",
          "given": [
            "Michael"
          ]
        }
      ],
      "gender": "male",
      "birthDate": "1980-01-01",
      "resourceType": "Patient"
    }
    '@  | 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/fhir+json" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient" | Select-Object -Expand Content

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

  4. FHIR 저장소에서 환자 리소스를 검색하고 저장소에 두 개의 환자 리소스가 포함되어 있는지 확인합니다.

    REST

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

    • PROJECT_ID: Google Cloud 프로젝트 ID
    • LOCATION: 상위 데이터 세트의 위치
    • DATASET_ID: FHIR 저장소의 상위 데이터 세트
    • FHIR_STORE_ID: FHIR 저장소 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/fhirStores/FHIR_STORE_ID/fhir/Patient"

    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/fhirStores/FHIR_STORE_ID/fhir/Patient" | Select-Object -Expand Content

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

FHIR 저장소에서 BigQuery 스트리밍 구성

FHIR 저장소를 업데이트하여 BigQuery 스트리밍을 구성합니다. 스트리밍을 구성하면 Cloud Healthcare API는 BigQuery 데이터 세트로 리소스 변경사항을 스트리밍합니다.

  1. 기존 FHIR 저장소를 업데이트하여 BigQuery 데이터 세트의 위치를 추가합니다.

    REST

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

    • PROJECT_ID: Google Cloud 프로젝트 ID
    • LOCATION: 상위 데이터 세트의 위치
    • DATASET_ID: FHIR 저장소의 상위 데이터 세트
    • FHIR_STORE_ID: FHIR 저장소 ID
    • BIGQUERY_PROJECT_ID: FHIR 리소스 변경사항을 스트리밍하기 위한 BigQuery 데이터 세트가 포함된 Google Cloud 프로젝트
    • BIGQUERY_DATASET_ID: FHIR 리소스 변경사항을 스트리밍하는 BigQuery 데이터 세트

    JSON 요청 본문:

    {
      "streamConfigs": [
        {
          "bigqueryDestination": {
            "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID",
            "schemaConfig": {
              "schemaType": "ANALYTICS_V2"
            }
          }
        }
      ]
    }
    

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

    curl

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

    cat > request.json << 'EOF'
    {
      "streamConfigs": [
        {
          "bigqueryDestination": {
            "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID",
            "schemaConfig": {
              "schemaType": "ANALYTICS_V2"
            }
          }
        }
      ]
    }
    EOF

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

    curl -X PATCH \
    -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?updateMask=streamConfigs"

    PowerShell

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

    @'
    {
      "streamConfigs": [
        {
          "bigqueryDestination": {
            "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID",
            "schemaConfig": {
              "schemaType": "ANALYTICS_V2"
            }
          }
        }
      ]
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

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

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

    Invoke-WebRequest `
    -Method PATCH `
    -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?updateMask=streamConfigs" | Select-Object -Expand Content

    API 탐색기

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

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

BigQuery에 대한 스트리밍 구성 확인

다음 단계를 완료하여 스트리밍이 올바르게 구성되었는지 확인합니다.

  1. FHIR 저장소에 세 번째 환자 리소스를 만듭니다.

    REST

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

    • PROJECT_ID: Google Cloud 프로젝트 ID
    • LOCATION: 상위 데이터 세트의 위치
    • DATASET_ID: FHIR 저장소의 상위 데이터 세트
    • FHIR_STORE_ID: FHIR 저장소 ID

    JSON 요청 본문:

    {
      "name": [
        {
          "use": "official",
          "family": "Lee",
          "given": [
            "Alex"
          ]
        }
      ],
      "gender": "male",
      "birthDate": "1990-01-01",
      "resourceType": "Patient"
    }
    

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

    curl

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

    cat > request.json << 'EOF'
    {
      "name": [
        {
          "use": "official",
          "family": "Lee",
          "given": [
            "Alex"
          ]
        }
      ],
      "gender": "male",
      "birthDate": "1990-01-01",
      "resourceType": "Patient"
    }
    EOF

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

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

    PowerShell

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

    @'
    {
      "name": [
        {
          "use": "official",
          "family": "Lee",
          "given": [
            "Alex"
          ]
        }
      ],
      "gender": "male",
      "birthDate": "1990-01-01",
      "resourceType": "Patient"
    }
    '@  | 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/fhir+json" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient" | Select-Object -Expand Content

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

  2. bq query를 실행하여 BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient 테이블을 쿼리합니다. BigQuery는 FHIR 리소스 유형별로 테이블을 구성합니다. 만든 세 번째 환자 리소스는 Patient 테이블에 있습니다.

    bq query \
       --project_id=BIGQUERY_PROJECT_ID \
       --use_legacy_sql=false \
       'SELECT COUNT(*) FROM `BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient`'

    쿼리는 다음 결과를 반환합니다. 결과는 BigQuery 테이블에 환자 리소스 레코드가 한 개 있는 것으로 나타납니다. FHIR 저장소에서 스트리밍을 구성한 후 환자 리소스가 추가되었기 때문입니다.

    +-----+
    | f0_ |
    +-----+
    |   1 |
    +-----+
    

3단계: 기존 FHIR 리소스를 BigQuery로 내보내기

BigQuery 데이터 세트와 동기화하려는 데이터가 포함된 기존 FHIR 저장소가 있는 경우 기존 데이터가 BigQuery에 있는지 확인하려면 다음 단계를 완료해야 합니다.

  1. BigQuery에 스트리밍 구성
  2. 기존 데이터를 BigQuery 데이터 세트로 내보냅니다.

스트리밍을 BigQuery 데이터 세트로 구성하기 전에 FHIR 저장소에 있는 두 개의 환자 리소스를 내보내려면 다음 단계를 완료하세요.

  1. FHIR 저장소의 리소스를 BigQuery로 내보내려면 gcloud healthcare fhir-stores export bq 명령어를 실행합니다. 이 명령어는 기존 BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient 테이블에 데이터를 추가하는 --write-disposition=write-append 플래그를 사용합니다.

    gcloud healthcare fhir-stores export bq FHIR_STORE_ID \
       --dataset=DATASET_ID \
       --location=LOCATION \
       --bq-dataset=bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET \
       --schema-type=analytics_v2 \
       --write-disposition=write-append
  2. BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient 테이블을 쿼리하여 BigQuery 데이터 세트의 환자 리소스 수를 확인합니다.

    bq query \
       --project_id=BIGQUERY_PROJECT_ID \
       --use_legacy_sql=false \
       'SELECT COUNT(*) FROM `BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient`'

    이 쿼리는 다음과 같은 결과를 반환하며, BigQuery 테이블에 환자 리소스 레코드가 4개 있음을 보여줍니다.

    +-----+
    | f0_ |
    +-----+
    |   4 |
    +-----+
    

    BigQuery 테이블에 있는 실제 환자 리소스는 3개이지만 쿼리는 4를 반환합니다. 리소스에 다른 작업의 중복이 포함된 경우 불일치가 발생할 수 있습니다. 이 경우 첫 번째 환자 리소스가 BigQuery 테이블에 두 번 추가되었습니다.

    • 환자 리소스 생성이 스트리밍된 경우
    • FHIR 저장소의 리소스를 BigQuery로 내보낸 경우

    BigQuery 테이블에는 첫 번째 환자 리소스의 변형 기록도 있습니다. 예를 들어 fhir.delete를 사용하여 환자 리소스를 삭제하면 BigQuery 테이블에는 값이 DELETEmeta.tag.code 열이 있습니다.

  3. FHIR 저장소에 있는 데이터의 최신 스냅샷을 가져오려면 를 쿼리합니다. Cloud Healthcare API는 각 리소스의 최신 버전만 보고 뷰를 구성합니다. 뷰 쿼리는 FHIR 저장소와 해당 BigQuery 테이블을 동기화 상태로 유지하는 가장 정확한 방법입니다.

    뷰를 쿼리하려면 다음 명령어를 실행합니다.

    bq query \
       --project_id=BIGQUERY_PROJECT_ID \
       --use_legacy_sql=false \
       'SELECT COUNT(*) FROM `BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.PatientView`'

    이 쿼리는 다음과 같은 결과를 반환하며, BigQuery 테이블에 환자 리소스가 3개 있음을 올바르게 보여줍니다.

    +-----+
    | f0_ |
    +-----+
    |   3 |
    +-----+
    

4단계: 여러 FHIR 저장소의 리소스를 동일한 BigQuery 데이터 세트로 스트리밍

경우에 따라 여러 FHIR 저장소의 FHIR 리소스를 동일한 BigQuery 데이터 세트로 스트리밍하여 FHIR 저장소의 집계된 FHIR 리소스를 분석할 수 있습니다.

다음 단계에서는 첫 번째 FHIR 저장소와 동일한 Cloud Healthcare API 데이터 세트에 두 번째 FHIR 저장소를 만들지만 FHIR 리소스를 집계할 때 다른 데이터 세트의 FHIR 저장소를 사용할 수 있습니다.

  1. BigQuery 스트리밍이 사용 설정된 두 번째 FHIR 저장소를 만들고 FHIR 저장소에서 BigQuery 스트리밍 구성에서 사용한 것과 동일한 BigQuery 데이터 세트를 사용합니다.

    REST

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

    • PROJECT_ID: Google Cloud 프로젝트 ID
    • LOCATION: 상위 데이터 세트의 위치
    • DATASET_ID: FHIR 저장소의 상위 데이터 세트
    • SECOND_FHIR_STORE_ID: 두 번째 FHIR 저장소의 식별자. FHIR 저장소 ID는 데이터 세트에서 고유해야 합니다. FHIR 저장소 ID는 숫자, 문자, 밑줄, 대시, 마침표로 구성된 1~256자의 모든 유니코드 문자열일 수 있습니다.
    • FHIR_STORE_VERSION: FHIR 저장소 버전: DSTU2, STU3 또는 R4
    • BIGQUERY_PROJECT_ID: FHIR 리소스 변경사항을 스트리밍하기 위한 BigQuery 데이터 세트가 포함된 Google Cloud 프로젝트
    • BIGQUERY_DATASET_ID: FHIR 리소스 변경사항을 스트리밍하는 BigQuery 데이터 세트

    JSON 요청 본문:

    {
      "version": "FHIR_STORE_VERSION"
      "streamConfigs": [
        {
          "bigqueryDestination": {
            "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID",
            "schemaConfig": {
              "schemaType": "ANALYTICS"
            }
          }
        }
      ]
    }
    

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

    curl

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

    cat > request.json << 'EOF'
    {
      "version": "FHIR_STORE_VERSION"
      "streamConfigs": [
        {
          "bigqueryDestination": {
            "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID",
            "schemaConfig": {
              "schemaType": "ANALYTICS"
            }
          }
        }
      ]
    }
    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?fhirStoreId=SECOND_FHIR_STORE_ID"

    PowerShell

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

    @'
    {
      "version": "FHIR_STORE_VERSION"
      "streamConfigs": [
        {
          "bigqueryDestination": {
            "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID",
            "schemaConfig": {
              "schemaType": "ANALYTICS"
            }
          }
        }
      ]
    }
    '@  | 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?fhirStoreId=SECOND_FHIR_STORE_ID" | Select-Object -Expand Content

    API 탐색기

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

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

  2. 두 번째 FHIR 저장소에 환자 리소스를 만듭니다.

    REST

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

    • PROJECT_ID: Google Cloud 프로젝트 ID
    • LOCATION: 상위 데이터 세트의 위치
    • DATASET_ID: FHIR 저장소의 상위 데이터 세트
    • SECOND_FHIR_STORE_ID: 두 번째 FHIR 저장소 ID

    JSON 요청 본문:

    {
      "name": [
        {
          "use": "official",
          "family": "Lee",
          "given": [
            "Alex"
          ]
        }
      ],
      "gender": "male",
      "birthDate": "1990-01-01",
      "resourceType": "Patient"
    }
    

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

    curl

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

    cat > request.json << 'EOF'
    {
      "name": [
        {
          "use": "official",
          "family": "Lee",
          "given": [
            "Alex"
          ]
        }
      ],
      "gender": "male",
      "birthDate": "1990-01-01",
      "resourceType": "Patient"
    }
    EOF

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

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/fhir+json" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/SECOND_FHIR_STORE_ID/fhir/Patient"

    PowerShell

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

    @'
    {
      "name": [
        {
          "use": "official",
          "family": "Lee",
          "given": [
            "Alex"
          ]
        }
      ],
      "gender": "male",
      "birthDate": "1990-01-01",
      "resourceType": "Patient"
    }
    '@  | 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/fhir+json" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/SECOND_FHIR_STORE_ID/fhir/Patient" | Select-Object -Expand Content

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

  3. BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient 테이블을 쿼리하여 BigQuery 테이블의 환자 리소스 수를 확인합니다.

    bq query \
       --project_id=BIGQUERY_PROJECT_ID \
       --use_legacy_sql=false \
       'SELECT COUNT(*) FROM `BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient`'

    새로운 환자 리소스에 대한 데이터를 스트리밍할 때, BigQuery는 BigQuery 데이터 세트의 기존 Patient 테이블을 사용했습니다. 쿼리는 다음과 같은 결과를 반환하며, BigQuery 테이블에 환자 리소스 레코드가 5개 있음을 보여줍니다. 테이블에 4개가 아닌 5개의 리소스가 포함된 이유에 대한 설명은 기존 FHIR 리소스를 BigQuery로 내보내기를 참조하세요.

    +-----+
    | f0_ |
    +-----+
    |   5 |
    +-----+
    
  4. 다음 명령어를 실행하여 뷰를 쿼리합니다.

    bq query \
       --project_id=BIGQUERY_PROJECT_ID \
       --use_legacy_sql=false \
       'SELECT COUNT(*) FROM `BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.PatientView`'

    이 쿼리는 다음 결과를 반환하며, 첫 번째 및 두 번째 FHIR 저장소와 BigQuery 테이블에 총 4개의 환자 리소스가 있음을 보여줍니다.

    +-----+
    | f0_ |
    +-----+
    |   4 |
    +-----+
    

삭제

이 튜토리얼용으로 새 프로젝트를 만든 경우 프로젝트 삭제 단계를 수행합니다. Cloud Healthcare API 및 BigQuery 리소스만 삭제하려면 Cloud Healthcare API 데이터 세트 삭제BigQuery 데이터 세트 삭제의 단계를 완료합니다.

프로젝트 삭제

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Cloud Healthcare API 데이터 세트 삭제

이 튜토리얼에서 만든 Cloud Healthcare API 데이터 세트가 더 이상 필요하지 않으면 삭제하면 됩니다. 데이터 세트를 삭제하면 데이터 세트 및 데이터 세트에 포함된 FHIR 저장소가 영구적으로 삭제됩니다.

  1. 데이터 세트를 삭제하려면 gcloud healthcare datasets delete 명령어를 사용합니다.

    gcloud healthcare datasets delete DATASET_ID \
    --location=LOCATION \
    --project=PROJECT_ID

    다음을 바꿉니다.

    • DATASET_ID: Cloud Healthcare API 데이터 세트
    • LOCATION: 데이터 세트의 위치.
    • PROJECT_ID: Google Cloud 프로젝트 ID
  2. 확인하려면 Y를 입력합니다.

출력은 다음과 같습니다.

Deleted dataset [DATASET_ID].

BigQuery 데이터세트 삭제

이 튜토리얼에서 생성된 BigQuery 데이터 세트가 더 이상 필요하지 않으면 삭제할 수 있습니다. 데이터 세트를 삭제하면 데이터 세트 및 데이터 세트에 포함된 모든 테이블이 영구적으로 삭제됩니다.

  1. BIGQUERY_PROJECT_IDBIGQUERY_DATASET_ID 데이터 세트를 bq rm 명령어를 실행하여 삭제합니다.

    bq rm --recursive=true BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID

    --recursive 플래그는 Patient 테이블을 포함한 데이터 세트의 모든 테이블을 삭제합니다.

  2. 확인하려면 Y를 입력합니다.

다음 단계