FHIR リソースを BigQuery にストリーミングして同期する


このチュートリアルでは、BigQuery ストリーミングを使用して FHIR ストアを BigQuery データセットとほぼリアルタイムで同期する方法について説明します。

目標

このチュートリアルでは、次の手順を説明します。

  1. BigQuery の権限を構成します。
  2. FHIR ストアを作成して患者リソースを追加します。
  3. FHIR ストアで BigQuery ストリーミングを有効にします。
  4. BigQuery へのストリーミング構成を確認します。
  5. 既存の FHIR リソースを BigQuery にエクスポートします。
  6. 複数の FHIR ストアから同じ BigQuery データセットにリソースをストリーミングします。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

  6. Cloud Healthcare API を有効にします。

    API を有効にする

  7. Google Cloud CLI をインストールします。
  8. gcloud CLI を初期化するには:

    gcloud init

ステップ 1: BigQuery の権限を構成する

FHIR リソースの変更を BigQuery にストリーミングするには、Cloud Healthcare Service Agentサービス アカウントに追加の権限を付与する必要があります。詳しくは、FHIR ストアの BigQuery 権限をご覧ください。

ステップ 2: BigQuery ストリーミングを構成して検証する

BigQuery へのストリーミングを有効にするには、次の手順に従います。

FHIR ストアの作成と患者リソースの追加

FHIR ストアを作成して 2 つの患者リソースを追加するには、次の手順に従います。

  1. FHIR ストアを作成します。

    REST

    リクエストのデータを使用する前に、次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID
    • LOCATION: データセットの場所
    • DATASET_ID: FHIR ストアの親データセット
    • FHIR_STORE_ID: FHIR ストアの ID。FHIR ストア ID は、次の要件を満たす必要があります。
      • そのデータセットの一意の ID
      • 次のもので構成される 1 ~ 256 文字の Unicode 文字列。
        • 数字
        • 文字
        • アンダースコア
        • ダッシュ
        • ピリオド
    • 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 Explorer

    リクエスト本文をコピーして、メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。このツールにリクエスト本文を貼り付け、その他の必須フィールドに入力して、[Execute] をクリックします。

    次のような JSON レスポンスが返されます。

  2. FHIR ストアに 1 つ目の患者リソースを作成します。

    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 ストアに 2 つ目の患者リソースを作成します。

    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 ストアで患者リソースを検索し、ストアに 2 つの患者リソースが含まれていることを確認します。

    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 Explorer

    リクエスト本文をコピーして、メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。このツールにリクエスト本文を貼り付け、その他の必須フィールドに入力して、[Execute] をクリックします。

    次のような JSON レスポンスが返されます。

BigQuery へのストリーミング構成を確認する

次の手順を実行して、ストリーミングが正しく構成されていることを確認します。

  1. 3 つ目の患者リソースを 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 リソースタイプでテーブルは整理します。作成した 3 つ目の患者リソースは、Patient テーブルにあります。

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

    次の結果が返されます。FHIR ストアにストリーミングを構成した後に患者リソースを追加したため、BigQuery テーブルには 1 つの患者リソース レコードがあります。

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

手順 3: 既存の FHIR リソースを BigQuery にエクスポートする

BigQuery データセットと同期したいデータを含む既存の FHIR ストアがある場合は、次の手順を行い、既存のデータが BigQuery にあることを確認する必要があります。

  1. BigQuery へのストリーミングを構成します。
  2. 既存のデータを BigQuery データセットにエクスポートします。

BigQuery データセットへのストリーミングを構成する前に FHIR ストアに存在する 2 つの患者リソースをエクスポートするには、次の手順を行います。

  1. FHIR ストアのリソースを BigQuery にエクスポートするには、gcloud healthcare fhir-stores export bq コマンドを実行します。このコマンドは --write-disposition=write-append フラグを使用して、既存の BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient テーブルにデータを追加します。

    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 を返します。リソースに異なるオペレーションの重複があると、不整合が発生する可能性があります。この例では、1 つ目の患者リソースが BigQuery テーブルに 2 回追加されています。

    • 患者リソースの作成がストリーミングされた日時
    • FHIR ストアのリソースが BigQuery にエクスポートされた日時

    BigQuery テーブルには、1 つ目の患者リソースのミューテーション履歴も含まれています。たとえば、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 リソースに対して分析を行うには、複数の FHIR ストアからの FHIR リソースを同じ BigQuery データセットにストリーミングすることが必要になる場合があります。

次の手順では、最初の FHIR ストアと同じ Cloud Healthcare API データセットに 2 つ目の FHIR ストアを作成しますが、FHIR リソースを集約するときに、異なるデータセットの FHIR ストアを使用できます。

  1. BigQuery ストリーミングを有効にして 2 つ目の FHIR ストアを作成し、FHIR ストアで BigQuery ストリーミングを構成するで使用したのと同じ BigQuery データセットを使用します。

    REST

    リクエストのデータを使用する前に、次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID
    • LOCATION: 親データセットの場所
    • DATASET_ID: FHIR ストアの親データセット
    • SECOND_FHIR_STORE_ID: 2 つ目の FHIR ストアの ID。FHIR ストアの ID はデータセット内で一意である必要があります。FHIR ストアの ID は、数字、英字、アンダースコア、ダッシュ、ピリオドで構成される 1~256 文字の Unicode 文字列です。
    • 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 Explorer

    リクエスト本文をコピーして、メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。このツールにリクエスト本文を貼り付け、その他の必須フィールドに入力して、[Execute] をクリックします。

    次のような JSON レスポンスが返されます。

  2. 2 つ目の FHIR ストアで患者リソースを作成します。

    REST

    リクエストのデータを使用する前に、次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID
    • LOCATION: 親データセットの場所
    • DATASET_ID: FHIR ストアの親データセット
    • SECOND_FHIR_STORE_ID: 2 つ目の 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`'
    

    このクエリでは次の結果を返して、組み合わされた 1 番目と 2 番目の 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」と入力します。

次のステップ