Exporter des ressources FHIR vers BigQuery

Cette page explique comment exporter des ressources FHIR vers BigQuery à des fins d'exploration et d'analyse.

Définir des autorisations BigQuery

Avant d'exporter des 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.

Exporter des ressources FHIR

Les exemples suivants montrent comment exporter des ressources FHIR vers une table BigQuery.

Lorsque vous définissez la destination BigQuery, utilisez l'URI complet, comme suit :

bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID

Le comportement de l'opération d'exportation peut varier en fonction des éléments suivants :

  • Si la table de destination existe déjà
  • Si vous avez défini le champ force.
  • Si vous avez défini une valeur pour l'énumération writeDisposition. Si vous utilisez l'énumération writeDisposition, ne définissez pas le champ force.

Le comportement associé à chacun de ces cas est le suivant :

  • Si la table de destination existe déjà et que le champ force est défini sur true, l'opération d'exportation écrase la table existante.
  • Si la table de destination existe déjà et que le champ force est défini sur false, une erreur se produit.
  • Si la table de destination n'existe pas déjà, l'opération d'exportation crée une table, que vous définissiez ou non le champ force.
  • Lorsque vous utilisez writeDisposition, si la table de destination existe déjà et qu'elle est vide, l'opération d'exportation se termine avec succès au lieu de renvoyer une erreur.

Console

Pour exporter des ressources FHIR vers BigQuery, procédez comme suit :

  1. Dans Cloud Console, accédez à la page Ensembles de données.
    Accéder à la page Ensembles de données
  2. Cliquez sur l'ensemble de données contenant le datastore FHIR à partir duquel vous exportez des ressources FHIR.
  3. Dans la liste des datastores, sélectionnez Exporter dans la liste Actions du datastore FHIR.
  4. Sur la page Exporter des ressources FHIR qui s'affiche, sélectionnez Table BigQuery.
  5. Dans les options de sortie BigQuery, choisissez la manière dont les données sont exportées vers BigQuery.
  6. Dans Options de sortie BigQuery, cliquez sur Parcourir pour choisir le projet et l'ensemble de données BigQuery.
  7. Dans Sélectionner un ensemble de données, recherchez le projet et l'ensemble de données BigQuery vers lesquels vous souhaitez exporter les ressources FHIR.
  8. Pour définir la profondeur de toutes les structures récursives dans le schéma de sortie, cliquez sur le niveau de profondeur approprié dans le curseur Profondeur de la structure récursive. Par défaut, la valeur récursive est 2.

    Pour en savoir plus, consultez la section projects.locations.datasets.fhirStores.SchemaConfig.
  9. Cliquez sur Exporter pour exporter des ressources FHIR vers BigQuery.
  10. Pour suivre l'état de l'opération, cliquez sur l'onglet Opérations. Une fois l'opération terminée, les indications suivantes s'affichent :
    • La section État de l'opération de longue durée est représentée par une coche verte sous l'en-tête OK.
    • La section Présentation comporte une coche verte et un indicateur OK sur la même ligne que l'ID de l'opération.
    Si vous rencontrez des erreurs, cliquez sur Actions, puis sur Afficher les détails dans Cloud Logging.

gcloud

Pour exporter des ressources FHIR vers BigQuery, utilisez la commande gcloud healthcare fhir-stores export bq. Spécifiez les informations suivantes :

  • Nom de l'ensemble de données parent
  • Le nom du magasin FHIR
  • Le nom d'un ensemble de données BigQuery existant
  • Nom du projet auquel appartient l'ensemble de données BigQuery
  • Valeur schema-type définie sur analytics
  • Cette option peut prendre l'une des valeurs suivantes pour l'option --writeDisposition :
    • write-empty : n'exporte les données que si les tables de destination sont vides. Il s'agit de la valeur par défaut.
    • write-truncate : efface toutes les données existantes dans les tables avant d'écrire les instances.
    • write-append : ajoute des données aux tables existantes.

L'exemple suivant montre la commande gcloud healthcare fhir-stores export bq.

gcloud healthcare fhir-stores export bq FHIR_STORE_ID \
  --dataset=DATASET_ID \
  --location=LOCATION \
  --bq-dataset=bq://PROJECT_ID.BIGQUERY_DATASET_ID \
  --schema-type=analytics \
  --write-disposition={write-empty|write-truncate|write-append}

La ligne de commande affiche l'ID de l'opération et, une fois l'opération terminée, done :

Request issued for: [FHIR_STORE_ID]
Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/OPERATION_ID] to complete...done.
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID

Pour afficher plus de détails sur l'opération, exécutez la commande gcloud healthcare operations describe en fournissant le OPERATION_ID spécifié dans la réponse :

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

La réponse inclut done: true.

done: true
metadata:
'@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata
apiMethodName: google.cloud.healthcare.v1.fhir.FhirService.ExportResources
createTime: 'CREATE_TIME'
endTime: 'END_TIME'
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID
response:
'@type': type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ExportResourcesResponse
fhirStore: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID

API

Pour en savoir plus, consultez les sections sur projects.locations.datasets.fhirStores.export

curl

Pour exporter des ressources FHIR, envoyez une requête POST et spécifiez les informations suivantes :

  • Nom de l'ensemble de données parent
  • Le nom du magasin FHIR
  • Le nom d'un ensemble de données BigQuery existant
  • Nom du projet auquel appartient l'ensemble de données BigQuery
  • Le champ schemaType défini sur la valeur ANALYTICS
  • Un jeton d'accès
  • Une des valeurs suivantes pour l'énumération writeDisposition :
    • write-empty : n'exporte les données que si les tables de destination sont vides. Il s'agit de la valeur par défaut.
    • write-truncate : efface toutes les données existantes dans les tables avant d'écrire les instances.
    • write-append : ajoute des données aux tables existantes.
  • (Disponible uniquement dans la version v1beta1) : champ facultatif, _type, qui n'exporte qu'un ou plusieurs types de ressources FHIR
  • (Disponible uniquement dans la version v1beta1) : champ facultatif, _since, qui n'exporte que les ressources mises à jour après un délai spécifique, défini par YYYY-MM-DDThh:mm:ss.sss+zz:zz.

L'opération génère une table BigQuery pour chaque type de ressource dans le datastore FHIR.

L'exemple suivant montre une requête POST utilisant curl.

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'bigqueryDestination': {
        'datasetUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID',
        'schemaConfig': {
          'schemaType': 'ANALYTICS'
        }
        'writeDisposition': '{write-empty|write-truncate|write-append}'
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:export"

Si la requête aboutit, le serveur renvoie la réponse au format JSON :

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

La réponse contient un nom d'opération. Pour suivre l'état de l'opération, vous pouvez utiliser la méthode get :

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/operations/OPERATION_ID"

Si la requête aboutit, le serveur renvoie une réponse avec l'état de l'opération au format JSON :

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.fhir.FhirService.ExportResources",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL",
    "counter": {
      "success": "SUCCESS_COUNT"
    }
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ExportResourcesResponse",
  }
}

PowerShell

Pour exporter des ressources FHIR, envoyez une requête POST et spécifiez les informations suivantes :

  • Nom de l'ensemble de données parent
  • Le nom du magasin FHIR
  • Le nom d'un ensemble de données BigQuery existant
  • Nom du projet auquel appartient l'ensemble de données BigQuery
  • Le champ schemaType défini sur la valeur ANALYTICS
  • Un jeton d'accès
  • Une des valeurs suivantes pour l'énumération writeDisposition :
    • write-empty : n'exporte les données que si les tables de destination sont vides. Il s'agit de la valeur par défaut.
    • write-truncate : efface toutes les données existantes dans les tables avant d'écrire les instances.
    • write-append : ajoute des données aux tables existantes.
  • (Disponible uniquement dans la version v1beta1) : champ facultatif, _type, qui n'exporte qu'un ou plusieurs types de ressources FHIR
  • (Disponible uniquement dans la version v1beta1) : champ facultatif, _since, qui n'exporte que les ressources mises à jour après un délai spécifique, défini par YYYY-MM-DDThh:mm:ss.sss+zz:zz.

L'opération génère une table BigQuery pour chaque type de ressource dans le datastore FHIR.

L'exemple suivant montre une requête POST utilisant Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'bigqueryDestination': {
      'datasetUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID',
      'schemaConfig': {
        'schemaType': 'ANALYTICS'
      },
      'writeDisposition': '{write-empty|write-truncate|write-append}'
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:export" | Select-Object -Expand Content

Si la requête aboutit, le serveur renvoie la réponse au format JSON :

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

La réponse contient un nom d'opération. Pour suivre l'état de l'opération, vous pouvez utiliser la méthode get :

$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/operations/OPERATION_ID" | Select-Object -Expand Content

Si la requête aboutit, le serveur renvoie une réponse avec l'état de l'opération au format JSON :

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.fhir.FhirService.ExportResources",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL",
    "counter": {
      "success": "SUCCESS_COUNT"
    }
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ExportResourcesResponse",
  }
}

Interroger et analyser des données FHIR dans BigQuery

Après avoir exporté les ressources FHIR vers BigQuery, consultez la solution Analyser des données FHIR dans BigQuery pour en savoir plus sur l'interrogation et l'analyse des données exportées. La solution utilise l'ensemble de données public de données synthétiques générées Synthea™ dans FHIR, qui héberge plus d'un million d'enregistrements patient synthétiques générés aux formats Synthea™ et FHIR.

Résoudre les problèmes liés aux requêtes d'exportation FHIR

Si des erreurs se produisent lors d'une requête d'exportation FHIR, elles sont consignées dans Cloud Logging. Pour en savoir plus, consultez la section Afficher les journaux d'erreurs dans Cloud Logging.

Si l'ensemble de l'opération renvoie une erreur, consultez la section Résoudre les problèmes d'opérations de longue durée.

Étape suivante