Diffuser et synchroniser des ressources FHIR avec BigQuery


Ce tutoriel décrit les scénarios dans lesquels vous pouvez utiliser le streaming BigQuery pour synchroniser un magasin FHIR avec un ensemble de données BigQuery quasiment en temps réel.

Objectifs

Le tutoriel illustre les étapes suivantes :

  1. Configurer les autorisations BigQuery.
  2. Créer un magasin FHIR et ajouter des ressources Patient.
  3. Configurer le streaming BigQuery sur le magasin FHIR.
  4. Vérifier la configuration du streaming vers 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. 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

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

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Cloud Healthcare API.

    Enable the API

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

    gcloud init

Étape 1 : Configurer 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 : Configurer et vérifier le streaming BigQuery

Pour activer le streaming vers 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 :

    REST

    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
    • DATASET_ID : ensemble de données parent du magasin FHIR.
    • FHIR_STORE_ID: Identifiant du store FHIR. L'ID du store FHIR doit comporter les éléments suivants :
      • Un ID unique dans son ensemble de données
      • Une chaîne Unicode de 1 à 256 caractères composée des éléments suivants :
        • Numéros
        • Lettres
        • Traits de soulignement
        • Tirets
        • Points
    • FHIR_STORE_VERSION : version FHIR du store FHIR. Les options disponibles sont DSTU2, STU3 ou R4.

    Corps JSON de la requête :

    {
      "version": "FHIR_STORE_VERSION"
    }
    

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

    curl

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

    cat > request.json << 'EOF'
    {
      "version": "FHIR_STORE_VERSION"
    }
    EOF

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

    @'
    {
      "version": "FHIR_STORE_VERSION"
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

    Copiez le corps de la requête et ouvrez la page de référence de la méthode. Le panneau APIs Explorer 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 Execute (Exécuter).

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

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

    REST

    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
    • 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

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

    @'
    {
      "name": [
        {
          "use": "official",
          "family": "Smith",
          "given": [
            "Darcy"
          ]
        }
      ],
      "gender": "female",
      "birthDate": "1970-01-01",
      "resourceType": "Patient"
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

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

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

    REST

    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

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

    @'
    {
      "name": [
        {
          "use": "official",
          "family": "Zhang",
          "given": [
            "Michael"
          ]
        }
      ],
      "gender": "male",
      "birthDate": "1980-01-01",
      "resourceType": "Patient"
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

    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 :

    REST

    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 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 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 le streaming BigQuery sur le magasin FHIR

Mettez à jour le magasin FHIR pour configurer le streaming BigQuery. Une fois le streaming configuré, l'API Cloud Healthcare diffuse toutes 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 :

    REST

    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 les modifications de ressources FHIR.

    Corps JSON de la requête :

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

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

    curl

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

    Copiez le corps de la requête et ouvrez la page de référence de la méthode. Le panneau APIs Explorer 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 Execute (Exécuter).

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

Vérifier la configuration du streaming vers BigQuery

Vérifiez que le streaming est correctement configuré en procédant comme suit :

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

    REST

    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

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

    @'
    {
      "name": [
        {
          "use": "official",
          "family": "Lee",
          "given": [
            "Alex"
          ]
        }
      ],
      "gender": "male",
      "birthDate": "1990-01-01",
      "resourceType": "Patient"
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

    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 indique qu'il existe un enregistrement de ressources Patient dans la table BigQuery, car vous avez ajouté la ressource Patient après avoir configuré le streaming sur le magasin FHIR.

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

Étape 3 : Exporter des ressources FHIR existantes vers BigQuery

Si vous disposez d'un magasin FHIR contenant des données et que vous souhaitez le 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 vers BigQuery.
  2. Exporter les données existantes vers l'ensemble de données BigQuery.

Pour exporter les deux ressources Patient qui existent dans le magasin FHIR avant de configurer le streaming 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_v2 \
       --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, indiquant qu'il existe 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 provenant d'opérations différentes. Dans ce cas, la première ressource Patient a été ajoutée à la table BigQuery deux fois :

    • Lorsque la création de la ressource Patient a été diffusée
    • Lorsque 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 contient 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 consultant que 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 indique correctement que la table BigQuery contient trois ressources Patient :

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

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

Dans certains cas, vous pouvez vouloir diffuser des ressources FHIR provenant de plusieurs magasins FHIR vers le même ensemble de données BigQuery pour effectuer des analyses sur les ressources FHIR agrégées à partir 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 à partir de différents ensembles de données lors de l'agrégation de ressources FHIR.

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

    REST

    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 du magasin FHIR peut être n'importe quelle chaîne Unicode de 1 à 256 caractères composée de chiffres, de lettres, de traits de soulignement, de tirets et de points.
    • FHIR_STORE_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 les modifications de ressources FHIR.

    Corps JSON de la requête :

    {
      "version": "FHIR_STORE_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

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

    Copiez le corps de la requête et ouvrez la page de référence de la méthode. Le panneau APIs Explorer 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 Execute (Exécuter).

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

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

    REST

    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 : ID du deuxième 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

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

    @'
    {
      "name": [
        {
          "use": "official",
          "family": "Lee",
          "given": [
            "Alex"
          ]
        }
      ],
      "gender": "male",
      "birthDate": "1990-01-01",
      "resourceType": "Patient"
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Exécutez ensuite la commande suivante pour envoyer votre requête 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

    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 la diffusion 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, indiquant qu'il existe cinq enregistrements de ressources Patient dans la table BigQuery : Consultez la section Exporter des ressources FHIR existantes vers BigQuery pour découvrir 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 indique qu'il existe quatre ressources Patient dans les premier et deuxième magasins FHIR combinés et 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 Cloud Healthcare et BigQuery, suivez les étapes décrites dans les sections Supprimer l'ensemble de données de l'API Cloud Healthcare et Supprimer l'ensemble de données BigQuery.

Supprimer le projet

  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.

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 entraîne la suppression définitive de l'ensemble de données et des 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 entraîne la suppression définitive de l'ensemble de données et des tables qu'il contient.

  1. Supprimez l'ensemble de données 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