BigQuery에 DICOM 메타데이터 내보내기

이 페이지에서는 탐색 및 분석을 위해 DICOM 메타데이터를 BigQuery로 내보내는 방법을 설명합니다. DICOM 메타데이터를 내보낼 때 생성되는 BigQuery 스키마에 대한 자세한 내용은 BigQuery DICOM 스키마 이해를 참조하세요.

BigQuery 권한 설정

DICOM 메타데이터를 BigQuery 테이블로 내보내기 전에 Cloud Healthcare 서비스 에이전트 서비스 계정에 추가 권한을 부여해야 합니다. 자세한 내용은 DICOM 저장소 BigQuery 권한을 참조하세요.

BigQuery 대상 설정

BigQuery 대상을 설정할 때 다음과 같이 정규화된 URI를 사용합니다.
bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID
내보내기 작업의 동작은 다음에 따라 달라질 수 있습니다.
  • 대상 테이블이 존재하는지 여부
  • force 필드(API 사용) 또는 --overwrite-table 플래그(Google Cloud CLI 사용) 설정 여부
  • writeDisposition 열거형 값을 설정했는지 여부. writeDisposition enum을 사용하는 경우 force 필드를 설정하지 마세요.
이러한 각 경우의 동작은 다음과 같습니다.
  • 대상 테이블이 존재하고 forcetrue로 설정되었거나 --overwrite-table 플래그가 지정되었으면 내보내기 작업이 기존 테이블을 덮어씁니다.
  • 대상 테이블이 존재하고 forcefalse로 설정되었거나 --overwrite-table 플래그가 지정되지 않았으면 오류가 발생합니다.
  • 대상 테이블이 아직 존재하지 않으면 force 필드 또는 --overwrite-table 플래그를 지정했는지 여부와 관계없이 새 테이블이 생성됩니다.
  • writeDisposition의 동작은 관련 문서를 참조하세요. writeDisposition 열거형은 force를 사용할 때 옵션과 유사한 동작을 수행합니다. 단, 대상 테이블이 이미 있고 비어 있는 경우 내보내기 작업이 오류를 반환하는 대신 완료됩니다.

DICOM 메타데이터 내보내기

다음 샘플은 DICOM 메타데이터를 BigQuery 테이블로 내보내는 방법을 보여줍니다. 이 샘플에서 DICOM 저장소 및 BigQuery 테이블은 동일한 프로젝트에 있습니다. DICOM 메타데이터를 다른 프로젝트의 BigQuery 테이블로 내보내려면 다른 프로젝트로 DICOM 메타데이터 내보내기를 참조하세요.

콘솔

DICOM 메타데이터를 BigQuery 테이블로 내보내려면 다음 단계를 완료합니다.

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

    데이터 세트로 이동

  2. 내보낼 메타데이터가 포함된 DICOM 저장소가 있는 데이터 세트를 클릭합니다.

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

  4. 표시된 DICOM 저장소 내보내기 페이지에서 BigQuery 테이블을 선택합니다.

  5. 프로젝트 필드에서 찾아보기를 클릭하고 프로젝트를 선택합니다.

  6. 데이터 세트 목록에서 DICOM 메타데이터를 내보내려는 BigQuery 데이터 세트를 선택합니다.

  7. 테이블 필드에 새 테이블 이름을 입력합니다. BigQuery는 각 선택 항목을 확인하여 대상 테이블이 올바른지 확인합니다.

  8. 대상 테이블 쓰기 처리 섹션에서 다음 중 하나를 선택합니다. 이러한 옵션은 WriteDisposition 열거형에 해당합니다.

    • 대상 테이블이 비어 있는 경우에만 데이터 내보내기: WRITE_EMPTY와 동일합니다.
    • 대상 테이블에 데이터 추가: WRITE_APPEND와 동일합니다.
    • 인스턴스를 쓰기 전에 대상 테이블의 모든 기존 데이터 삭제: WRITE_TRUNCATE와 동일합니다.
  9. 내보내기를 클릭하여 DICOM 메타데이터를 BigQuery 테이블로 내보냅니다.

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

gcloud

DICOM 메타데이터를 BigQuery 테이블로 내보내려면 gcloud healthcare dicom-stores export bq 명령어를 실행합니다.

  1. DICOM 메타데이터를 내보냅니다.

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

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • LOCATION: 데이터 세트 위치
    • DATASET_ID: DICOM 저장소의 상위 데이터 세트
    • DICOM_STORE_ID: DICOM 저장소 ID입니다.
    • BIGQUERY_DATASET_ID: DICOM 메타데이터를 내보내는 기존 BigQuery 데이터 세트의 이름입니다.
    • BIGQUERY_TABLE_ID: BigQuery 데이터 세트의 새 테이블 또는 기존 테이블의 이름입니다. 내보내기 작업으로 새 테이블을 생성하는 경우 테이블 이름 요구사항은 테이블 이름 지정을 참조하세요.
    • WRITE_DISPOSITION: WriteDisposition 열거형 값입니다. 다음 값 중 하나를 사용합니다.
      • write-empty: BigQuery 테이블이 비어 있는 경우에만 데이터를 내보냅니다.
      • write-truncate: DICOM 인스턴스를 작성하기 전 BigQuery 테이블의 모든 기존 데이터를 삭제합니다.
      • write-append: BigQuery 테이블에 데이터를 추가합니다.

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

    Linux, macOS 또는 Cloud Shell

    gcloud healthcare dicom-stores export bq DICOM_STORE_ID \
      --location=LOCATION \
      --dataset=DATASET_ID \
      --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \
      --write-disposition=WRITE_DISPOSITION
    

    Windows(PowerShell)

    gcloud healthcare dicom-stores export bq DICOM_STORE_ID `
      --location=LOCATION `
      --dataset=DATASET_ID `
      --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID `
      --write-disposition=WRITE_DISPOSITION
    

    Windows(cmd.exe)

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

    응답

    Request issued for: [DICOM_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.dicom.DicomService.ExportDicomData_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.protobuf.Empty'
    

REST

DICOM 메타데이터를 BigQuery 테이블로 내보내려면 projects.locations.datasets.dicomStores.export 메서드를 사용합니다.

  1. DICOM 메타데이터를 내보냅니다.

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

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • LOCATION: 데이터 세트 위치
    • DATASET_ID: DICOM 저장소의 상위 데이터 세트
    • DICOM_STORE_ID: DICOM 저장소 ID입니다.
    • BIGQUERY_DATASET_ID: DICOM 메타데이터를 내보내는 기존 BigQuery 데이터 세트의 이름입니다.
    • BIGQUERY_TABLE_ID: BigQuery 데이터 세트의 새 테이블 또는 기존 테이블의 이름입니다. 내보내기 작업으로 새 테이블을 생성하는 경우 테이블 이름 요구사항은 테이블 이름 지정을 참조하세요.
    • WRITE_DISPOSITION: WriteDisposition 열거형 값입니다. 다음 값 중 하나를 사용합니다.
      • WRITE_EMPTY: BigQuery 테이블이 비어 있는 경우에만 데이터를 내보냅니다.
      • WRITE_TRUNCATE: DICOM 인스턴스를 작성하기 전 BigQuery 테이블의 모든 기존 데이터를 삭제합니다.
      • WRITE_APPEND: BigQuery 테이블에 데이터를 추가합니다.

    JSON 요청 본문:

    {
      "bigqueryDestination": {
          "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID",
          "writeDisposition": "WRITE_DISPOSITION"
      }
    }
    

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

    curl

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

    cat > request.json << 'EOF'
    {
      "bigqueryDestination": {
          "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID",
          "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/dicomStores/DICOM_STORE_ID:export"

    PowerShell

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

    @'
    {
      "bigqueryDestination": {
          "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID",
          "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/dicomStores/DICOM_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가 포함되었으면 장기 실행 작업이 완료된 것입니다.

DICOM 메타데이터를 다른 프로젝트로 내보내기

한 프로젝트의 DICOM 저장소에서 DICOM 메타데이터를 다른 프로젝트의 BigQuery 데이터 세트로 내보내려면 먼저 DICOM 메타데이터를 다른 프로젝트 권한으로 내보내기를 참조하여 대상 프로젝트에서 IAM 권한을 설정하는 방법을 알아보세요.

gcloud

한 프로젝트의 DICOM 저장소에서 다른 프로젝트의 BigQuery 테이블로 DICOM 메타데이터를 내보내려면 gcloud healthcare dicom-stores export bq 명령어를 사용합니다.

  1. DICOM 메타데이터를 내보냅니다.

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

    • SOURCE_PROJECT_ID: 소스 Google Cloud 프로젝트의 ID입니다.
    • SOURCE_LOCATION: 소스 데이터 세트 위치입니다.
    • SOURCE_DATASET_ID: 소스 DICOM 저장소의 상위 데이터 세트입니다.
    • SOURCE_DICOM_STORE_ID: 소스 DICOM 저장소 ID입니다.
    • DESTINATION_PROJECT_ID: 다른 프로젝트의 ID입니다.
    • DESTINATION_BIGQUERY_DATASET_ID: DICOM 메타데이터를 내보내려는 대상 프로젝트의 기존 BigQuery 데이터 세트 이름입니다.
    • DESTINATION_BIGQUERY_TABLE_ID: BigQuery 데이터 세트의 새 테이블 또는 기존 테이블의 이름입니다. 내보내기 작업으로 새 테이블을 생성하는 경우 테이블 이름 요구사항은 테이블 이름 지정을 참조하세요.
    • WRITE_DISPOSITION: WriteDisposition 열거형 값입니다. 다음 값 중 하나를 사용합니다.
      • write-empty: BigQuery 테이블이 비어 있는 경우에만 데이터를 내보냅니다.
      • write-truncate: DICOM 인스턴스를 작성하기 전 BigQuery 테이블의 모든 기존 데이터를 삭제합니다.
      • write-append: BigQuery 테이블에 데이터를 추가합니다.

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

    Linux, macOS 또는 Cloud Shell

    gcloud healthcare dicom-stores export bq SOURCE_DICOM_STORE_ID \
      --project=SOURCE_PROJECT_ID \
      --location=SOURCE_LOCATION \
      --dataset=SOURCE_DATASET_ID \
      --bq-table=bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID \
      --write-disposition=WRITE_DISPOSITION
    

    Windows(PowerShell)

    gcloud healthcare dicom-stores export bq SOURCE_DICOM_STORE_ID `
      --project=SOURCE_PROJECT_ID `
      --location=SOURCE_LOCATION `
      --dataset=SOURCE_DATASET_ID `
      --bq-table=bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID `
      --write-disposition=WRITE_DISPOSITION
    

    Windows(cmd.exe)

    gcloud healthcare dicom-stores export bq SOURCE_DICOM_STORE_ID ^
      --project=SOURCE_PROJECT_ID ^
      --location=SOURCE_LOCATION ^
      --dataset=SOURCE_DATASET_ID ^
      --bq-table=bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID ^
      --write-disposition=WRITE_DISPOSITION
    
    응답은 다음과 같습니다. 응답에는 장기 실행 작업의 식별자가 포함됩니다. 메서드 호출을 완료하는 데 상당한 시간이 걸릴 수 있는 장기 실행 작업은 반환됩니다. 이 명령어는 장기 실행 작업을 폴링한 후 내보내기가 완료되면 name 필드에 작업 이름을 출력합니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

    응답

    Request issued for: [SOURCE_DICOM_STORE_ID]
    Waiting for operation [projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID] to complete...⠏
    name: projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID
    

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

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

    • SOURCE_PROJECT_ID: 소스 Google Cloud 프로젝트의 ID입니다.
    • SOURCE_LOCATION: 소스 데이터 세트 위치입니다.
    • SOURCE_DATASET_ID: 소스 데이터 세트 ID입니다.
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

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

    Linux, macOS 또는 Cloud Shell

    gcloud healthcare operations describe OPERATION_ID \
        --project=SOURCE_PROJECT_ID \
        --dataset=SOURCE_DATASET_ID \
        --location=SOURCE_LOCATION
    

    Windows(PowerShell)

    gcloud healthcare operations describe OPERATION_ID `
        --project=SOURCE_PROJECT_ID `
        --dataset=SOURCE_DATASET_ID `
        --location=SOURCE_LOCATION
    

    Windows(cmd.exe)

    gcloud healthcare operations describe OPERATION_ID ^
        --project=SOURCE_PROJECT_ID ^
        --dataset=SOURCE_DATASET_ID ^
        --location=SOURCE_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.dicom.DicomService.ExportDicomData_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/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID
    // The `response` field only displays if there were no errors.
    response:
      '@type': 'type.googleapis.com/google.protobuf.Empty'
    

REST

한 프로젝트의 DICOM 저장소에서 다른 프로젝트의 BigQuery 테이블로 DICOM 메타데이터를 내보내려면 projects.locations.datasets.dicomStores.export 메서드를 사용합니다.

  1. DICOM 메타데이터를 내보냅니다.

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

    • SOURCE_PROJECT_ID: 소스 Google Cloud 프로젝트의 ID입니다.
    • SOURCE_LOCATION: 소스 데이터 세트 위치입니다.
    • SOURCE_DATASET_ID: 소스 DICOM 저장소의 상위 데이터 세트입니다.
    • SOURCE_DICOM_STORE_ID: 소스 DICOM 저장소 ID입니다.
    • DESTINATION_PROJECT_ID: 다른 프로젝트의 ID입니다.
    • DESTINATION_BIGQUERY_DATASET_ID: DICOM 메타데이터를 내보내려는 대상 프로젝트의 기존 BigQuery 데이터 세트 이름입니다.
    • DESTINATION_BIGQUERY_TABLE_ID: BigQuery 데이터 세트의 새 테이블 또는 기존 테이블의 이름입니다. 내보내기 작업으로 새 테이블을 생성하는 경우 테이블 이름 요구사항은 테이블 이름 지정을 참조하세요.
    • WRITE_DISPOSITION: WriteDisposition 열거형 값입니다. 다음 값 중 하나를 사용합니다.
      • WRITE_EMPTY: BigQuery 테이블이 비어 있는 경우에만 데이터를 내보냅니다.
      • WRITE_TRUNCATE: DICOM 인스턴스를 작성하기 전 BigQuery 테이블의 모든 기존 데이터를 삭제합니다.
      • WRITE_APPEND: BigQuery 테이블에 데이터를 추가합니다.

    JSON 요청 본문:

    {
      "bigqueryDestination": {
          "tableUri": "bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID",
          "writeDisposition": "WRITE_DISPOSITION"
      }
    }
    

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

    curl

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

    cat > request.json << 'EOF'
    {
      "bigqueryDestination": {
          "tableUri": "bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID",
          "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/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:export"

    PowerShell

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

    @'
    {
      "bigqueryDestination": {
          "tableUri": "bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID",
          "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/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:export" | Select-Object -Expand Content

    API 탐색기

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

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

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

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

    • SOURCE_PROJECT_ID: 소스 Google Cloud 프로젝트의 ID입니다.
    • SOURCE_LOCATION: 소스 데이터 세트 위치입니다.
    • SOURCE_DATASET_ID: 소스 데이터 세트 ID입니다.
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

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

    curl

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

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_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/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

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

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

필터를 사용하여 DICOM 메타데이터 내보내기

기본적으로 DICOM 파일을 Cloud Storage로 내보내면 지정된 DICOM 저장소의 모든 DICOM 파일이 내보내집니다. 마찬가지로 DICOM 메타데이터를 BigQuery로 내보내면 지정된 DICOM 저장소의 모든 DICOM 데이터 메타데이터가 내보내집니다.

필터를 사용하여 DICOM 데이터 또는 메타데이터의 하위 집합을 내보낼 수 있습니다. 필터 파일에 필터를 정의합니다.

필터 파일 구성

필터 파일은 Cloud Storage 또는 BigQuery로 내보낼 DICOM 파일을 정의합니다. 다음과 같은 수준에서 필터 파일을 구성할 수 있습니다.

  • 연구 수준
  • 시리즈 수준
  • 인스턴스 수준

필터 파일은 각 줄에 내보낼 연구, 시리즈, 또는 인스턴스를 정의하는 여러 개의 줄로 구성됩니다. 각 줄은 /studies/STUDY_UID[/series/SERIES_UID[/instances/INSTANCE_UID]] 형식을 사용합니다.

필터 파일을 전달할 때 필터 파일에 연구, 시리즈, 인스턴스가 지정되지 않은 경우 해당 연구, 시리즈, 인스턴스는 내보낼 수 없습니다.

경로의 /studies/STUDY_UID 부분만 필요합니다. /studies/STUDY_UID를 지정하여 전체 연구를 내보내거나 /studies/STUDY_UID/series/SERIES_UID를 지정하여 전체 시리즈를 내보낼 수 있습니다.

다음 필터 파일을 예로 들어 봅시다. 이 필터 파일은 1개의 연구, 2개의 시리즈, 3개의 개별 인스턴스를 내보냅니다.

/studies/1.123.456.789
/studies/1.666.333.111/series/123.456
/studies/1.666.333.111/series/567.890
/studies/1.888.999.222/series/123.456/instances/111
/studies/1.888.999.222/series/123.456/instances/222
/studies/1.888.999.222/series/123.456/instances/333

BigQuery를 사용하여 필터 파일 만들기

일반적으로 먼저 DICOM 저장소에서 BigQuery로 메타데이터를 내보내 필터 파일을 만듭니다. 이렇게 하면 BigQuery를 사용하여 DICOM 저장소에서 DICOM 데이터의 연구, 시리즈, 인스턴스 UID를 볼 수 있습니다. 그런 다음 단계별 안내를 완료하세요.

  1. 관심 있는 연구, 시리즈, 인스턴스 UID를 쿼리합니다. 예를 들어 DICOM 메타데이터를 BigQuery로 내보낸 후 다음 쿼리를 실행하여 연구, 시리즈, 인스턴스 UID를 필터 파일 요구사항과 호환되는 형식으로 연결할 수 있습니다.
    SELECT CONCAT
        ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
        [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
    
  2. 쿼리가 큰 결과 집합을 반환하면 BigQuery의 대상 테이블에 쿼리 결과를 저장하여 새 테이블을 구체화할 수 있습니다.
  3. 대상 테이블에 쿼리 결과를 저장한 경우 대상 테이블의 콘텐츠를 파일에 저장하고 Cloud Storage로 내보낼 수 있습니다. 이렇게 하는 방법의 각 단계는 테이블 데이터 내보내기를 참조하세요. 내보낸 파일이 필터 파일입니다. 내보내기 작업에서 필터를 지정할 때 Cloud Storage의 필터 파일 위치를 사용하세요.

수동으로 필터 파일 만들기

커스텀 콘텐츠로 필터 파일을 만들고 Cloud Storage 버킷에 업로드할 수 있습니다. 내보내기 작업에서 필터를 지정할 때 Cloud Storage의 필터 파일 위치를 사용하세요. 다음 샘플에서는 gsutil cp 명령어를 사용하여 Cloud Storage 버킷에 필터 파일을 업로드하는 방법을 보여줍니다.
gsutil cp FILTER_FILE gs://BUCKET

필터 파일 전달

필터 파일을 만든 후 DICOM 내보내기 작업을 호출하고 REST API를 사용하여 필터 파일을 전달할 수 있습니다. 다음 샘플은 필터를 사용하여 DICOM 메타데이터를 내보내는 방법을 보여줍니다.

gcloud

필터를 사용하여 DICOM 메타데이터를 BigQuery 테이블로 내보내려면 gcloud beta healthcare dicom-stores export bq 명령어를 사용합니다.

  1. DICOM 메타데이터를 내보냅니다.

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

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • LOCATION: 데이터 세트 위치
    • DATASET_ID: DICOM 저장소의 상위 데이터 세트
    • DICOM_STORE_ID: DICOM 저장소 ID입니다.
    • BIGQUERY_DATASET_ID: DICOM 메타데이터를 내보내는 기존 BigQuery 데이터 세트의 이름입니다.
    • BIGQUERY_TABLE_ID: BigQuery 데이터 세트의 새 테이블 또는 기존 테이블의 이름입니다. 내보내기 작업으로 새 테이블을 생성하는 경우 테이블 이름 요구사항은 테이블 이름 지정을 참조하세요.
    • BUCKET: 필터 파일이 포함된 Cloud Storage 버킷의 이름입니다. 필터 파일이 디렉터리에 있으면 경로에 디렉터리를 포함합니다.
    • FILTER_FILE: Cloud Storage 버킷에 있는 필터 파일의 위치 및 이름입니다.
    • WRITE_DISPOSITION: WriteDisposition 열거형 값입니다. 다음 값 중 하나를 사용합니다.
      • write-empty: BigQuery 테이블이 비어 있는 경우에만 데이터를 내보냅니다.
      • write-truncate: DICOM 인스턴스를 작성하기 전 BigQuery 테이블의 모든 기존 데이터를 삭제합니다.
      • write-append: BigQuery 테이블에 데이터를 추가합니다.

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

    Linux, macOS 또는 Cloud Shell

    gcloud beta healthcare dicom-stores export bq DICOM_STORE_ID \
      --location=LOCATION \
      --dataset=DATASET_ID \
      --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \
      --filter-config-gcs-uri=gs://BUCKET/FILTER_FILE \
      --write-disposition=WRITE_DISPOSITION
    

    Windows(PowerShell)

    gcloud beta healthcare dicom-stores export bq DICOM_STORE_ID `
      --location=LOCATION `
      --dataset=DATASET_ID `
      --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID `
      --filter-config-gcs-uri=gs://BUCKET/FILTER_FILE `
      --write-disposition=WRITE_DISPOSITION
    

    Windows(cmd.exe)

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

    응답

    Request issued for: [DICOM_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.dicom.DicomService.ExportDicomData_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/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID
    // The `response` field only displays if there were no errors.
    response:
      '@type': 'type.googleapis.com/google.protobuf.Empty'
    

REST

필터를 사용하여 DICOM 메타데이터를 BigQuery 테이블로 내보내려면 projects.locations.datasets.dicomStores.export 메서드를 사용합니다.

  1. DICOM 메타데이터를 내보냅니다.

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

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • LOCATION: 데이터 세트 위치
    • DATASET_ID: DICOM 저장소의 상위 데이터 세트
    • DICOM_STORE_ID: DICOM 저장소 ID입니다.
    • BIGQUERY_DATASET_ID: DICOM 메타데이터를 내보내는 기존 BigQuery 데이터 세트의 이름입니다.
    • BIGQUERY_TABLE_ID: BigQuery 데이터 세트의 새 테이블 또는 기존 테이블의 이름입니다. 내보내기 작업으로 새 테이블을 생성하는 경우 테이블 이름 요구사항은 테이블 이름 지정을 참조하세요.
    • BUCKET: 필터 파일이 포함된 Cloud Storage 버킷의 이름입니다. 필터 파일이 디렉터리에 있으면 경로에 디렉터리를 포함합니다.
    • FILTER_FILE: Cloud Storage 버킷에 있는 필터 파일의 위치 및 이름입니다.
    • WRITE_DISPOSITION: WriteDisposition 열거형 값입니다. 다음 값 중 하나를 사용합니다.
      • WRITE_EMPTY: BigQuery 테이블이 비어 있는 경우에만 데이터를 내보냅니다.
      • WRITE_TRUNCATE: DICOM 인스턴스를 작성하기 전 BigQuery 테이블의 모든 기존 데이터를 삭제합니다.
      • WRITE_APPEND: BigQuery 테이블에 데이터를 추가합니다.

    JSON 요청 본문:

    {
      "bigqueryDestination": {
          "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID",
          "writeDisposition": "WRITE_DISPOSITION"
      },
      "filterConfig": {
          "resourcePathsGcsUri": "gs://BUCKET/FILTER_FILE"
      }
    }
    

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

    curl

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

    cat > request.json << 'EOF'
    {
      "bigqueryDestination": {
          "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID",
          "writeDisposition": "WRITE_DISPOSITION"
      },
      "filterConfig": {
          "resourcePathsGcsUri": "gs://BUCKET/FILTER_FILE"
      }
    }
    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/dicomStores/DICOM_STORE_ID:export"

    PowerShell

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

    @'
    {
      "bigqueryDestination": {
          "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID",
          "writeDisposition": "WRITE_DISPOSITION"
      },
      "filterConfig": {
          "resourcePathsGcsUri": "gs://BUCKET/FILTER_FILE"
      }
    }
    '@  | 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/dicomStores/DICOM_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가 포함되었으면 장기 실행 작업이 완료된 것입니다.

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

DICOM 메타데이터를 BigQuery 테이블로 내보낸 후 메타데이터에 대해 추가 세부정보를 가져오기 위해 샘플 쿼리를 실행할 수 있습니다. 다음 샘플은 몇 가지 공통적인 사용 사례에 대해 쿼리를 실행하는 방법을 보여줍니다.

메타데이터 전체 검색

PACS(Picture Archiving and Communication System) 또는 VNA(Vendor Neutral Archive)와 같이 다른 시스템에서 검색하기 어려운 대규모 메타데이터를 검색하려는 경우를 생각해 봅시다. 다음 쿼리는 환자의 PatientID 값을 쿼리하고 DICOMweb 경로를 사용하여 특정 이미지 인스턴스를 검색하는 방법을 보여줍니다. 이 샘플은 NIH Chest X-ray 데이터 세트chc-nih-chest-xray.nih_chest_xray.nih_chest_xray 테이블을 사용합니다.

#standardSQL
SELECT CONCAT('/dicomWeb/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID) as DICOMwebPath
FROM `chc-nih-chest-xray.nih_chest_xray.nih_chest_xray`
WHERE PatientID = '19045';

쿼리가 환자와 연관된 연구를 반환합니다. 다음 응답에는 JSON 형식 지정이 사용됩니다.

[
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.169629990647803559688464142879817265366193/series/1.3.6.1.4.1.11129.5.5.141990184899344268273968625887396932057061/instances/1.3.6.1.4.1.11129.5.5.162448513493627342869165322873398445570578"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.114160532832901355654444239008681456919023/series/1.3.6.1.4.1.11129.5.5.178361108150351071908200174504411112440700/instances/1.3.6.1.4.1.11129.5.5.145959606905209488520697484018030440952428"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.177801331756958922168115732894519725643007/series/1.3.6.1.4.1.11129.5.5.134128639331055702643451404466208677561042/instances/1.3.6.1.4.1.11129.5.5.148534317486838863760908141408862094292875"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.119570482687494886334491471870663517807852/series/1.3.6.1.4.1.11129.5.5.148050768676645373034111775531663876425927/instances/1.3.6.1.4.1.11129.5.5.111153708388576066195389700503245704293300"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.144704399171290022427247626928443085419319/series/1.3.6.1.4.1.11129.5.5.190285793344339390593165731988543561416633/instances/1.3.6.1.4.1.11129.5.5.110245902713751842026864359179754889505217"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.172276126220388966649736649950361623806435/series/1.3.6.1.4.1.11129.5.5.171512371498506519035489729484464872160452/instances/1.3.6.1.4.1.11129.5.5.111721417729733087384317002785068394901165"
  }
]

최신 연구 쿼리

데이터 세트의 PTS 읽기 작업 목록에 데이터 세트의 최신 연구를 채우고 싶다고 가정해 보겠습니다.

다음 쿼리는 인스턴스 수 및 주변 메타데이터와 함게 최신 연구를 검색하고 표시하는 방법을 보여줍니다. 이 샘플은 TCIA 데이터 세트bigquery-public-data.idc_v5.dicom_metadata 테이블을 사용합니다.

#standardSQL
SELECT
  MIN(CONCAT(StudyDate, ' ', StudyTime)) as StudyDateTime, MIN(PatientID) as PatientID, StudyInstanceUID, COUNT(*) as InstanceCount
FROM
 `bigquery-public-data.idc_v5.dicom_metadata` AS dicom
GROUP BY StudyInstanceUID
ORDER BY StudyDateTime DESC
LIMIT 10;

쿼리가 다음 정보를 반환합니다.

  • 시스템에 들어온 최근 10건 연구 및 시스템이 들어온 시점
  • 각 연구와 연관된 환자
  • 연구 UID
  • 연구와 연관된 인스턴스 수

다음 응답에는 JSON 형식 지정이 사용됩니다.

[
  {
    "StudyDateTime": "2021-07-11 00:38:22",
    "PatientID": "C3L-01924",
    "StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2466232160.763753303.1625963902816.3.0",
    "InstanceCount": "4"
  }, {
    "StudyDateTime": "2021-07-10 23:52:10",
    "PatientID": "C3L-01924",
    "StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2463459463.1074873794.1625961130119.3.0",
    "InstanceCount": "4"
  }, {
    "StudyDateTime": "2021-07-10 23:31:13",
    "PatientID": "C3L-02513",
    "StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2462202516.1453336368.1625959873172.3.0",
    "InstanceCount": "7"
  }, {
    "StudyDateTime": "2021-07-10 23:25:17",
    "PatientID": "C3L-01924",
    "StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2461846936.496969835.1625959517592.3.0",
    "InstanceCount": "4"
  }, {
    "StudyDateTime": "2021-07-10 22:35:16",
    "PatientID": "C3L-02515",
    "StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2458845347.1905567435.1625956516003.3.0",
    "InstanceCount": "6"
  }, {
    "StudyDateTime": "2021-07-10 21:49:46",
    "PatientID": "C3L-02515",
    "StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2456116127.1264613559.1625953786783.3.0",
    "InstanceCount": "7"
  }, {
    "StudyDateTime": "2021-07-10 21:46:04",
    "PatientID": "C3L-02513",
    "StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2455894080.1705479047.1625953564736.3.0",
    "InstanceCount": "6"
  }, {
    "StudyDateTime": "2021-07-10 21:13:30",
    "PatientID": "C3L-01924",
    "StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2453939652.2052768474.1625951610308.3.0",
    "InstanceCount": "4"
  }, {
    "StudyDateTime": "2021-07-10 21:10:17",
    "PatientID": "C3L-02515",
    "StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2453746219.164669562.1625951416875.3.0",
    "InstanceCount": "6"
  }, {
    "StudyDateTime": "2021-07-10 20:05:48",
    "PatientID": "C3L-02513",
    "StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2449877792.1996682667.1625947548448.3.0",
    "InstanceCount": "6"
  }
]

제한사항 및 추가 동작

DICOM 태그에 BigQuery에서 지원되는 유형(제외된 VR에 나열됨)이 없으면 대상 BigQuery 테이블에서 별도의 열(DroppedTags.TagName)에 나열됩니다.

DICOM 내보내기 요청 문제 해결

DICOM에서 BigQuery 요청으로 메타데이터 내보내기 중에 오류가 발생하면 오류가 Cloud Logging에 로깅됩니다. 자세한 내용은 Cloud Logging에서 오류 로그 보기를 참조하세요.