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

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

手順 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 |
    +-----+