Diffuser et synchroniser des ressources FHIR avec BigQuery

Ce tutoriel explique les scénarios dans lesquels vous pouvez utiliser la diffusion BigQuery pour garder un magasin FHIR synchronisé avec un ensemble de données BigQuery en quasi-temps réel.

Objectifs

  1. Configurez les autorisations BigQuery.
  2. Créer un magasin FHIR et ajouter des ressources Patient.
  3. Configurer la diffusion BigQuery sur le magasin FHIR
  4. Vérifier la configuration de streaming sur BigQuery
  5. Exporter des ressources FHIR existantes vers BigQuery
  6. Diffuser les ressources de plusieurs magasins FHIR vers le même ensemble de données BigQuery.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Activez Cloud Healthcare API.

    Activer l'API

  5. Installez et initialisez le SDK Cloud.

Étape 1: Configurez les autorisations BigQuery

Pour diffuser des modifications de ressources FHIR vers BigQuery, vous devez accorder des autorisations supplémentaires au compte de service Agent de service Cloud Healthcare. Pour en savoir plus, consultez la section Autorisations BigQuery pour les datastores FHIR.

Étape 2: Configurez et validez le streaming BigQuery

Pour activer le streaming sur BigQuery, procédez comme suit:

Créer un magasin FHIR et ajouter des ressources Patient

Pour créer un magasin FHIR et ajouter deux ressources Patient, procédez comme suit:

  1. Créez le magasin FHIR:

    API REST et ligne de commande

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID : ID de votre projet Google Cloud
    • LOCATION: emplacement de l'ensemble de données parent
    • DATASET_ID: ensemble de données parent du magasin FHIR
    • FHIR_STORE_ID: identifiant du magasin FHIR. L'ID du magasin FHIR doit être unique dans l'ensemble de données. L'ID de magasin FHIR peut être toute chaîne Unicode de 1 à 256 caractères composée de chiffres, de lettres, de traits de soulignement, de tirets et de points.
    • VERSION: version du magasin FHIR: DSTU2, STU3 ou R4

    Corps JSON de la requête :

    {
      "version": "VERSION"
    }
    

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      cat > request.json << 'EOF'
      {
        "version": "VERSION"
      }
      EOF
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      curl -X POST \
      -H "Authorization: Bearer "$(gcloud auth application-default 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

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      @'
      {
        "version": "VERSION"
      }
      '@  | Out-File -FilePath request.json -Encoding utf8
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      $cred = gcloud auth application-default 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

    Copiez le corps de la requête et ouvrez la page de référence de la méthode. Le panneau de l'explorateur d'API s'ouvre dans la partie droite de la page. Vous pouvez interagir avec cet outil pour envoyer des requêtes. Collez le corps de la requête dans cet outil, renseignez tous les champs obligatoires, puis cliquez sur Exécuter.

    Vous devriez recevoir une réponse JSON de ce type :

  2. Créez la première ressource Patient dans le magasin FHIR:

    API REST et ligne de commande

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID : ID de votre projet Google Cloud
    • LOCATION: emplacement de l'ensemble de données parent
    • DATASET_ID: ensemble de données parent du magasin FHIR
    • FHIR_STORE_ID: ID du magasin FHIR

    Corps JSON de la requête :

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

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      cat > request.json << 'EOF'
      {
        "name": [
          {
            "use": "official",
            "family": "Smith",
            "given": [
              "Darcy"
            ]
          }
        ],
        "gender": "female",
        "birthDate": "1970-01-01",
        "resourceType": "Patient"
      }
      EOF
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      curl -X POST \
      -H "Authorization: Bearer "$(gcloud auth application-default 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

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      @'
      {
        "name": [
          {
            "use": "official",
            "family": "Smith",
            "given": [
              "Darcy"
            ]
          }
        ],
        "gender": "female",
        "birthDate": "1970-01-01",
        "resourceType": "Patient"
      }
      '@  | Out-File -FilePath request.json -Encoding utf8
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      $cred = gcloud auth application-default 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

    Vous devriez recevoir une réponse JSON de ce type :

  3. Créez la deuxième ressource Patient dans le magasin FHIR:

    API REST et ligne de commande

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID : ID de votre projet Google Cloud
    • LOCATION: emplacement de l'ensemble de données parent
    • DATASET_ID: ensemble de données parent du magasin FHIR
    • FHIR_STORE_ID: ID du magasin FHIR

    Corps JSON de la requête :

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

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      cat > request.json << 'EOF'
      {
        "name": [
          {
            "use": "official",
            "family": "Zhang",
            "given": [
              "Michael"
            ]
          }
        ],
        "gender": "male",
        "birthDate": "1980-01-01",
        "resourceType": "Patient"
      }
      EOF
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      curl -X POST \
      -H "Authorization: Bearer "$(gcloud auth application-default 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

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      @'
      {
        "name": [
          {
            "use": "official",
            "family": "Zhang",
            "given": [
              "Michael"
            ]
          }
        ],
        "gender": "male",
        "birthDate": "1980-01-01",
        "resourceType": "Patient"
      }
      '@  | Out-File -FilePath request.json -Encoding utf8
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      $cred = gcloud auth application-default 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

    Vous devriez recevoir une réponse JSON de ce type :

  4. Recherchez les ressources Patient dans le magasin FHIR et vérifiez que le magasin contient les deux ressources Patient:

    API REST et ligne de commande

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID : ID de votre projet Google Cloud
    • LOCATION: emplacement de l'ensemble de données parent
    • DATASET_ID: ensemble de données parent du magasin FHIR
    • FHIR_STORE_ID: ID du magasin FHIR

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    Exécutez la commande suivante :

    curl -X GET \
    -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient"

    PowerShell

    Exécutez la commande suivante :

    $cred = gcloud auth application-default 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

    Vous devriez recevoir une réponse JSON de ce type :

Configurer la diffusion BigQuery sur le magasin FHIR

Mettre à jour le magasin FHIR pour configurer le streaming BigQuery. Une fois la diffusion configurée, l'API Cloud Healthcare diffuse les modifications de ressources vers l'ensemble de données BigQuery.

  1. Mettez à jour votre magasin FHIR existant pour ajouter l'emplacement de l'ensemble de données BigQuery:

    API REST et ligne de commande

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID : ID de votre projet Google Cloud
    • LOCATION: emplacement de l'ensemble de données parent
    • DATASET_ID: ensemble de données parent du magasin FHIR
    • FHIR_STORE_ID: ID de votre magasin FHIR
    • BIGQUERY_PROJECT_ID: projet Google Cloud contenant l'ensemble de données BigQuery pour le streaming des modifications de ressources FHIR
    • BIGQUERY_DATASET_ID: ensemble de données BigQuery dans lequel vous diffusez des modifications de ressources FHIR

    Corps JSON de la requête :

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

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      cat > request.json << 'EOF'
      {
        "streamConfigs": [
          {
            "bigqueryDestination": {
              "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID",
              "schemaConfig": {
                "schemaType": "ANALYTICS"
              }
            }
          }
        ]
      }
      EOF
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      curl -X PATCH \
      -H "Authorization: Bearer "$(gcloud auth application-default 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

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      @'
      {
        "streamConfigs": [
          {
            "bigqueryDestination": {
              "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID",
              "schemaConfig": {
                "schemaType": "ANALYTICS"
              }
            }
          }
        ]
      }
      '@  | Out-File -FilePath request.json -Encoding utf8
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      $cred = gcloud auth application-default 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

    Copiez le corps de la requête et ouvrez la page de référence de la méthode. Le panneau de l'explorateur d'API s'ouvre dans la partie droite de la page. Vous pouvez interagir avec cet outil pour envoyer des requêtes. Collez le corps de la requête dans cet outil, renseignez tous les champs obligatoires, puis cliquez sur Exécuter.

    Vous devriez recevoir une réponse JSON de ce type :

Vérifier la configuration de streaming vers BigQuery

Pour vérifier que la diffusion est correctement configurée, procédez comme suit:

  1. Créez une troisième ressource Patient dans le magasin FHIR:

    API REST et ligne de commande

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID : ID de votre projet Google Cloud
    • LOCATION: emplacement de l'ensemble de données parent
    • DATASET_ID: ensemble de données parent du magasin FHIR
    • FHIR_STORE_ID: ID du magasin FHIR

    Corps JSON de la requête :

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

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      cat > request.json << 'EOF'
      {
        "name": [
          {
            "use": "official",
            "family": "Lee",
            "given": [
              "Alex"
            ]
          }
        ],
        "gender": "male",
        "birthDate": "1990-01-01",
        "resourceType": "Patient"
      }
      EOF
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      curl -X POST \
      -H "Authorization: Bearer "$(gcloud auth application-default 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

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      @'
      {
        "name": [
          {
            "use": "official",
            "family": "Lee",
            "given": [
              "Alex"
            ]
          }
        ],
        "gender": "male",
        "birthDate": "1990-01-01",
        "resourceType": "Patient"
      }
      '@  | Out-File -FilePath request.json -Encoding utf8
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      $cred = gcloud auth application-default 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

    Vous devriez recevoir une réponse JSON de ce type :

  2. Interrogez la table BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient en exécutant bq query. BigQuery organise les tables par type de ressource FHIR. La troisième ressource Patient que vous avez créée se trouve dans la table Patient.

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

    La requête renvoie le résultat suivant : Le résultat montre qu'il existe un enregistrement de ressources Patient dans la table BigQuery, car vous avez ajouté la ressource Patient après avoir configuré la diffusion sur le magasin FHIR.

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

Étape 3: Exportez les ressources FHIR existantes vers BigQuery

Si vous disposez d'un magasin FHIR existant contenant des données que vous souhaitez synchroniser avec un ensemble de données BigQuery, vous devez effectuer les étapes suivantes pour vous assurer que les données existantes se trouvent dans BigQuery:

  1. Configurer le streaming sur BigQuery
  2. Exportez les données existantes vers l'ensemble de données BigQuery.

Pour exporter les deux ressources Patient qui existaient dans le datastore FHIR avant de configurer la diffusion vers l'ensemble de données BigQuery, procédez comme suit:

  1. Pour exporter les ressources du magasin FHIR vers BigQuery, exécutez la commande gcloud healthcare fhir-stores export bq. La commande utilise l'option --write-disposition=write-append, qui ajoute des données à la table BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient existante.

    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 \
       --write-disposition=write-append
    
  2. Interrogez la table BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient pour vérifier le nombre de ressources Patient dans l'ensemble de données BigQuery:

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

    La requête renvoie le résultat suivant, qui montre quatre enregistrements de ressources Patient dans la table BigQuery:

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

    Le nombre réel de ressources Patient dans la table BigQuery est de 3, mais la requête renvoie 4. Des incohérences peuvent se produire lorsqu'une ressource contient des doublons issus de différentes opérations. Dans ce cas, la première ressource Patient a été ajoutée à la table BigQuery à deux reprises:

    • Date de diffusion de la création de la ressource Patient
    • Quand les ressources du magasin FHIR ont été exportées vers BigQuery

    La table BigQuery contient également l'historique des mutations de la première ressource Patient. Par exemple, si vous supprimez la ressource Patient à l'aide de fhir.delete, la table BigQuery comporte une colonne meta.tag.code avec la valeur DELETE.

  3. Pour obtenir le dernier instantané des données dans le magasin FHIR, interrogez la vue. L'API Cloud Healthcare crée la vue en ne tenant compte que de la dernière version de chaque ressource. L'interrogation des vues est le moyen le plus précis de synchroniser un magasin FHIR et la table BigQuery correspondante.

    Pour interroger la vue, exécutez la commande suivante:

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

    La requête renvoie le résultat suivant, qui montre correctement que la table BigQuery contient trois ressources Patient:

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

Étape 4: Diffusez les ressources de plusieurs magasins FHIR dans le même ensemble de données BigQuery

Dans certains cas, vous pouvez diffuser des ressources FHIR de plusieurs magasins FHIR vers le même ensemble de données BigQuery pour effectuer des analyses sur les ressources FHIR agrégées des magasins FHIR.

Dans les étapes suivantes, vous allez créer un deuxième magasin FHIR dans le même ensemble de données de l'API Cloud Healthcare que le premier magasin FHIR, mais vous pouvez utiliser des magasins FHIR de différents ensembles de données lorsque vous agrégez des ressources FHIR.

  1. Créez un deuxième magasin FHIR avec la diffusion BigQuery activée et utilisez le même ensemble de données BigQuery que celui utilisé dans la section Configurer la diffusion BigQuery dans la boutique FHIR.

    API REST et ligne de commande

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID : ID de votre projet Google Cloud
    • LOCATION: emplacement de l'ensemble de données parent
    • DATASET_ID: ensemble de données parent du magasin FHIR
    • SECOND_FHIR_STORE_ID: identifiant du deuxième magasin FHIR. L'ID du magasin FHIR doit être unique dans l'ensemble de données. L'ID de magasin FHIR peut être toute chaîne Unicode de 1 à 256 caractères composée de chiffres, de lettres, de traits de soulignement, de tirets et de points.
    • VERSION: version du magasin FHIR: DSTU2, STU3 ou R4
    • BIGQUERY_PROJECT_ID: projet Google Cloud contenant l'ensemble de données BigQuery pour le streaming des modifications de ressources FHIR
    • BIGQUERY_DATASET_ID: ensemble de données BigQuery dans lequel vous diffusez des modifications de ressources FHIR

    Corps JSON de la requête :

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

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      cat > request.json << 'EOF'
      {
        "version": "VERSION"
        "streamConfigs": [
          {
            "bigqueryDestination": {
              "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID",
              "schemaConfig": {
                "schemaType": "ANALYTICS"
              }
            }
          }
        ]
      }
      EOF
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      curl -X POST \
      -H "Authorization: Bearer "$(gcloud auth application-default 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

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      @'
      {
        "version": "VERSION"
        "streamConfigs": [
          {
            "bigqueryDestination": {
              "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID",
              "schemaConfig": {
                "schemaType": "ANALYTICS"
              }
            }
          }
        ]
      }
      '@  | Out-File -FilePath request.json -Encoding utf8
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      $cred = gcloud auth application-default 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

    Copiez le corps de la requête et ouvrez la page de référence de la méthode. Le panneau de l'explorateur d'API s'ouvre dans la partie droite de la page. Vous pouvez interagir avec cet outil pour envoyer des requêtes. Collez le corps de la requête dans cet outil, renseignez tous les champs obligatoires, puis cliquez sur Exécuter.

    Vous devriez recevoir une réponse JSON de ce type :

  2. Créez une ressource Patient dans le deuxième magasin FHIR:

    API REST et ligne de commande

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID : ID de votre projet Google Cloud
    • LOCATION: emplacement de l'ensemble de données parent
    • DATASET_ID: ensemble de données parent du magasin FHIR
    • SECOND_FHIR_STORE_ID: deuxième ID de magasin FHIR

    Corps JSON de la requête :

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

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      cat > request.json << 'EOF'
      {
        "name": [
          {
            "use": "official",
            "family": "Lee",
            "given": [
              "Alex"
            ]
          }
        ],
        "gender": "male",
        "birthDate": "1990-01-01",
        "resourceType": "Patient"
      }
      EOF
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      curl -X POST \
      -H "Authorization: Bearer "$(gcloud auth application-default 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

    1. Enregistrez le corps de la requête dans un fichier nommé request.json. Copiez la commande suivante et exécutez-la sur le terminal pour créer ce fichier.
      @'
      {
        "name": [
          {
            "use": "official",
            "family": "Lee",
            "given": [
              "Alex"
            ]
          }
        ],
        "gender": "male",
        "birthDate": "1990-01-01",
        "resourceType": "Patient"
      }
      '@  | Out-File -FilePath request.json -Encoding utf8
    2. Exécutez la commande suivante dans le terminal. Elle fait référence au fichier request.json que vous venez de créer.
      $cred = gcloud auth application-default 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

    Vous devriez recevoir une réponse JSON de ce type :

  3. Interrogez la table BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient pour vérifier le nombre de ressources Patient dans la table BigQuery:

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

    Lors de l'insertion en flux continu des données sur la nouvelle ressource Patient, BigQuery a utilisé la table Patient existante de l'ensemble de données BigQuery. La requête renvoie le résultat suivant, qui montre qu'il existe cinq enregistrements de ressources Patient dans la table BigQuery. Consultez la page Exporter des ressources FHIR existantes vers BigQuery pour expliquer pourquoi la table contient cinq ressources au lieu de quatre.

    +-----+
    | f0_ |
    +-----+
    |   5 |
    +-----+
    
  4. Exécutez la commande suivante pour interroger la vue:

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

    La requête renvoie le résultat suivant, qui montre quatre ressources Patient dans les premier et deuxième magasins FHIR, ainsi que dans la table BigQuery:

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

Effectuer un nettoyage

Si vous avez créé un projet pour ce tutoriel, suivez les étapes décrites dans la section Supprimer le projet. Pour ne supprimer que les ressources de l'API Cloud Healthcare et de BigQuery, suivez les étapes Supprimer l'ensemble de données de l'API Cloud Healthcare et Supprimer l'ensemble de données BigQuery.

Supprimer le projet

  1. Dans Cloud Console, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer l'ensemble de données de l'API Cloud Healthcare

Si vous n'avez plus besoin de l'ensemble de données de l'API Cloud Healthcare créé dans ce tutoriel, vous pouvez le supprimer. La suppression d'un ensemble de données est définitive et supprime tous les magasins FHIR qu'il contient.

  1. Pour supprimer un ensemble de données, utilisez la commande gcloud healthcare datasets delete:

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

    Remplacez les éléments suivants :

    • DATASET_ID: ensemble de données de l'API Cloud Healthcare
    • LOCATION: emplacement de l'ensemble de données
    • PROJECT_ID : ID de votre projet Google Cloud
  2. Pour confirmer, saisissez Y.

Le résultat est le suivant :

Deleted dataset [DATASET_ID].

Supprimer l'ensemble de données BigQuery

Si vous n'avez plus besoin de l'ensemble de données BigQuery créé dans ce tutoriel, vous pouvez le supprimer. La suppression d'un ensemble de données est définitive et supprime toutes les tables qu'il contient.

  1. supprimer BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID en exécutant la commande bq rm:

    bq rm --recursive=true BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID
    

    L'option --recursive supprime toutes les tables de l'ensemble de données, y compris la table Patient.

  2. Pour confirmer, saisissez Y.

Étape suivante