Exporter des métadonnées DICOM vers BigQuery

Cette page explique comment exporter des métadonnées DICOM vers BigQuery à des fins d'exploration et d'analyse. Pour en savoir plus sur le schéma BigQuery créé lors de l'exportation de métadonnées DICOM, consultez la page Comprendre le schéma DICOM BigQuery.

Définir des autorisations BigQuery

Avant d'exporter des métadonnées DICOM 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 magasins DICOM.

Définir la destination 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 conditions suivantes :
  • Si la table de destination existe déjà
  • Si vous avez défini le champ force (à l'aide de l'API) ou l'option --overwrite-table (à l'aide de l'outil de ligne de commande gcloud)
  • 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 ou si l'option --overwrite-table est spécifiée, 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 ou si l'option --overwrite-table n'est pas spécifiée, une erreur se produit.
  • Si la table de destination n'existe pas, une table est créée, que vous définissiez ou non le champ force ou l'option --overwrite-table.
  • Le comportement de writeDisposition est décrit dans sa documentation. L'énumération writeDisposition exécute un comportement similaire aux options lors de l'utilisation de force, avec l'exception suivante : si la table de destination existe déjà et qu'elle est vide, l'opération d'exportation se termine au lieu de renvoyer une erreur.

Exporter des métadonnées DICOM

Les exemples suivants montrent comment exporter des métadonnées DICOM vers une table BigQuery. Dans ces exemples, le magasin DICOM et la table BigQuery se trouvent dans le même projet. Pour exporter des métadonnées DICOM vers un autre projet, consultez Exporter des métadonnées DICOM vers un autre projet.

Console

Pour exporter des métadonnées DICOM 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 magasin DICOM à partir duquel vous exportez des métadonnées DICOM.
  3. Dans la liste des datastores, sélectionnez Exporter dans la liste Actions du magasin DICOM.
  4. Sur la page Exporter un magasin DICOM qui s'affiche, sélectionnez Table BigQuery.
  5. Dans la liste Projet, sélectionnez le projet BigQuery.
  6. Dans la liste ID de l'ensemble de données, sélectionnez l'ensemble de données.
  7. Dans le champ Nom de la table, saisissez un nouveau nom de table.
    BigQuery vérifie chaque sélection pour s'assurer que la table de destination est valide.
  8. Cliquez sur Exporter pour exporter les métadonnées DICOM vers la destination définie dans BigQuery.
  9. 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 métadonnées DICOM vers BigQuery, exécutez la commande gcloud healthcare dicom-stores export bq. Spécifiez les informations suivantes :

  • Nom de l'ensemble de données parent
  • Le nom du magasin DICOM
  • Le nom d'un ensemble de données BigQuery existant
  • Le nom de la table d'exportation BigQuery. Le nom ne peut contenir que des lettres (majuscules ou minuscules), des chiffres et des traits de soulignement. Pour comprendre comment personnaliser le comportement de l'opération d'exportation, consultez la section Définir la destination BigQuery.

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

gcloud healthcare dicom-stores export bq DICOM_STORE_ID \
  --dataset=DATASET_ID \
  --location=LOCATION \
  --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \
  [--overwrite-table]

Une fois la commande exécutée, elle renvoie le nom de l'opération :

name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID

Pour afficher plus de détails sur l'opération, exécutez la commande gcloud healthcare operations describe et fournissez la valeur OPERATION_ID de la réponse :

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

Une fois l'opération terminée, la réponse inclut done: true.

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata
  apiMethodName: google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData
  createTime: 'CREATE_TIME'
  endTime: 'END_TIME'
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID
response:
  '@type': '...'

API

Pour exporter des métadonnées DICOM vers BigQuery, utilisez la méthode projects.locations.datasets.dicomStores.export.

curl

Pour exporter des métadonnées DICOM, envoyez une requête POST et spécifiez les informations suivantes:

  • Nom et emplacement de l'ensemble de données parent
  • Le nom du magasin DICOM
  • Le nom d'un ensemble de données BigQuery existant
  • Le nom de la table d'exportation BigQuery. Le nom ne peut contenir que des lettres (majuscules ou minuscules), des chiffres et des traits de soulignement. Pour comprendre comment personnaliser le comportement de l'opération d'exportation, consultez la section Définir la destination BigQuery.
  • 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.

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': {
        'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
      },
      'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_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.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

Pour exporter des métadonnées DICOM, envoyez une requête POST et spécifiez les informations suivantes:

  • Nom et emplacement de l'ensemble de données parent
  • Le nom du magasin DICOM
  • Le nom d'un ensemble de données BigQuery existant
  • Le nom de la table d'exportation BigQuery. Le nom ne peut contenir que des lettres (majuscules ou minuscules), des chiffres et des traits de soulignement. Pour comprendre comment personnaliser le comportement de l'opération d'exportation, consultez la section Définir la destination BigQuery.
  • 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.

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': {
      'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
    },
    'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_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.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

Exporter des métadonnées DICOM vers un autre projet

Pour exporter des métadonnées DICOM d'un projet vers un autre projet, consultez d'abord la section Autorisations permettant d'exporter des métadonnées DICOM vers un autre projet pour savoir comment définir des autorisations Cloud IAM dans le projet de destination.

gcloud

Pour exporter des métadonnées DICOM d'un magasin DICOM d'un seul projet vers une table BigQuery dans un autre projet, exécutez la commande gcloud healthcare dicom-stores export bq. Spécifiez les informations suivantes :

  • Nom de l'ensemble de données parent
  • Le nom du magasin DICOM
  • Le projet de destination
  • Le nom d'un ensemble de données BigQuery existant dans le projet de destination
  • Le nom de la table d'exportation BigQuery. Le nom ne peut contenir que des lettres (majuscules ou minuscules), des chiffres et des traits de soulignement. Pour en savoir plus sur la manière dont l'API Cloud Healthcare écrit des données dans la table BigQuery, consultez la section Définir la destination BigQuery.

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

gcloud healthcare dicom-stores export bq DICOM_STORE_ID \
  --dataset=DATASET_ID \
  --location=LOCATION \
  --bq-table=bq://DESTINATION_PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \
  [--overwrite-table]

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

Request issued for: [DICOM_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/dicomStores/DICOM_STORE_ID

Pour afficher plus de détails sur l'opération, exécutez la commande gcloud healthcare operations describe et fournissez la valeur OPERATION_ID de la réponse :

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

Une fois l'opération terminée, la réponse inclut done: true.

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata
  apiMethodName: google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData
  createTime: 'CREATE_TIME'
  endTime: 'END_TIME'
name: projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID
response:
  '@type': '...'

API

Pour exporter des métadonnées DICOM vers BigQuery, utilisez la méthode projects.locations.datasets.dicomStores.export.

curl

Pour exporter des métadonnées DICOM depuis un magasin DICOM d'un projet vers une table BigQuery dans un autre projet, envoyez une requête POST et spécifiez les informations suivantes:

  • Le projet source
  • Nom et emplacement de l'ensemble de données parent
  • Le nom du magasin DICOM
  • Le projet de destination
  • Le nom d'un ensemble de données BigQuery existant dans le projet de destination
  • Le nom de la table d'exportation BigQuery. Le nom ne peut contenir que des lettres (majuscules ou minuscules), des chiffres et des traits de soulignement. Pour en savoir plus sur la manière dont l'API Cloud Healthcare écrit des données dans la table BigQuery, consultez la section Définir la destination BigQuery.
  • 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.

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': {
        'tableUri': 'bq://DESTINATION_PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
      },
      'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
    }" "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export"

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

{
  "name": "projects/SOURCE_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/SOURCE_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/SOURCE_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.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

Pour exporter des métadonnées DICOM depuis un magasin DICOM d'un projet vers une table BigQuery dans un autre projet, envoyez une requête POST et spécifiez les informations suivantes:

  • Le projet source
  • Nom et emplacement de l'ensemble de données parent
  • Le nom du magasin DICOM
  • Le projet de destination
  • Le nom d'un ensemble de données BigQuery existant dans le projet de destination
  • Le nom de la table d'exportation BigQuery. Le nom ne peut contenir que des lettres (majuscules ou minuscules), des chiffres et des traits de soulignement. Pour en savoir plus sur la manière dont l'API Cloud Healthcare écrit des données dans la table BigQuery, consultez la section Définir la destination BigQuery.
  • 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.

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': {
      'tableUri': 'bq://DESTINATION_PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
    },
    'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export" | Select-Object -Expand Content

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

{
  "name": "projects/SOURCE_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/SOURCE_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/SOURCE_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.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

Exporter des métadonnées DICOM à l'aide de filtres

Par défaut, lorsque vous exportez des fichiers DICOM vers Cloud Storage, tous les fichiers DICOM du magasin DICOM spécifié sont exportés. De même, lorsque vous exportez des métadonnées DICOM vers BigQuery, les métadonnées de toutes les données DICOM du magasin DICOM spécifié sont exportées.

Vous pouvez exporter un sous-ensemble de données ou de métadonnées DICOM à l'aide d'un filtre. Vous définissez le filtre dans un fichier de filtre.

Configurer des fichiers de filtre

Un fichier de filtre définit les fichiers DICOM à exporter vers Cloud Storage ou BigQuery. Vous pouvez configurer les fichiers de filtre aux niveaux suivants :

  • Au niveau de l'étude
  • Au niveau de la série
  • Au niveau de l'instance

Le fichier de filtre est constitué de plusieurs lignes, chaque ligne définissant l'étude, la série ou l'instance que vous souhaitez exporter. Chaque ligne utilise le format /studies/STUDY_UID[/series/SERIES_UID[/instances/INSTANCE_UID]].

Si une étude, une série ou une instance n'est pas spécifiée dans le fichier de filtre lorsque vous transmettez le fichier, cette étude, cette série ou cette instance n'est pas exportée.

Seule la partie /studies/STUDY_UID du chemin est obligatoire. Vous pouvez exporter une étude entière en spécifiant /studies/STUDY_UID, ou exporter une série entière en spécifiant /studies/STUDY_UID/series/SERIES_UID.

Prenons l'exemple du fichier de filtre suivant : Le fichier de filtre génère l'exportation d'une étude, de deux séries et de trois instances individuelles :

/studies/1.123.456.789
/studies/1.666.333.111/series/123.456
/studies/1.666.333.111/series/567.890
/studies/1.888.999.222/series/123.456/instances/111
/studies/1.888.999.222/series/123.456/instances/222
/studies/1.888.999.222/series/123.456/instances/333

Créer un fichier de filtre à l'aide de BigQuery

Vous créez généralement un fichier de filtre en commençant par exporter les métadonnées d'un magasin DICOM vers BigQuery. Cela vous permet d'utiliser BigQuery pour afficher les UID d'étude, de série et d'instance des données DICOM dans votre magasin DICOM. Vous pouvez ensuite effectuer les étapes suivantes :

  1. Demander les UID d'étude, de série et d'instance qui vous intéressent. Par exemple, après avoir exporté des métadonnées DICOM vers BigQuery, vous pouvez exécuter la requête suivante pour concaténer les UID d'étude, de série et d'instance dans un format compatible avec les exigences du fichier de filtre :
    SELECT CONCAT
        ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
        [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
    
  2. Si la requête renvoie un grand ensemble de résultats, vous pouvez matérialiser une nouvelle table en enregistrant les résultats de la requête dans une table de destination dans BigQuery.
  3. Si vous avez enregistré les résultats de la requête dans une table de destination, vous pouvez enregistrer le contenu de celle-ci dans un fichier et l'exporter vers Cloud Storage. Pour obtenir des instructions sur la procédure à suivre, consultez la page Exporter des données de table. Le fichier exporté est votre fichier de filtre. Vous utiliserez l'emplacement du fichier de filtre dans Cloud Storage lors de la spécification du filtre dans l'opération d'exportation.

Créer un fichier de filtre manuellement

Vous pouvez créer un fichier de filtre avec du contenu personnalisé et l'importer dans un bucket Cloud Storage. Vous utiliserez l'emplacement du fichier de filtre dans Cloud Storage lors de la spécification du filtre dans l'opération d'exportation. L'exemple suivant montre comment importer un fichier de filtre dans un bucket Cloud Storage à l'aide de la commande gsutil cp :
gsutil cp PATH/TO/FILTER_FILE gs://BUCKET/DIRECTORY

Transmettre le fichier de filtre

Après avoir créé un fichier de filtre, vous pouvez appeler l'opération d'exportation DICOM et transmettre le fichier de filtre à l'aide de l'API REST. Les exemples suivants montrent comment exporter des métadonnées DICOM à l'aide d'un filtre.

gcloud

Pour exporter des métadonnées DICOM vers BigQuery à l'aide d'un filtre, utilisez la commande gcloud beta healthcare dicom-stores export bq :

gcloud beta healthcare dicom-stores export bq DICOM_STORE_ID \
  --dataset=DATASET_ID \
  --location=LOCATION \
  --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \
  --filter-config-gcs-uri=gs://BUCKET/DIRECTORY/FILTER_FILE

Remplacez les éléments suivants :

  • DICOM_STORE_ID : identifiant du magasin DICOM
  • DATASET_ID : nom de l'ensemble de données parent du magasin DICOM
  • LOCATION : emplacement de l'ensemble de données parent du magasin DICOM
  • PROJECT_ID : identifiant du projet contenant l'ensemble de données BigQuery
  • BIGQUERY_DATASET_ID : nom de l'ensemble de données BigQuery
  • BIGQUERY_TABLE_ID : nom de la table d'exportation BigQuery Le nom ne peut contenir que des lettres (majuscules ou minuscules), des chiffres et des traits de soulignement. Pour en savoir plus sur la manière dont l'API Cloud Healthcare écrit des données dans la table BigQuery, consultez la section Définir la destination BigQuery.
  • BUCKET/DIRECTORY/FILTER_FILE : emplacement du fichier de filtre dans un bucket Cloud Storage

Le résultat est le suivant :

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

Pour afficher l'état de l'opération, exécutez la commande gcloud healthcare operations describe et spécifiez la valeur OPERATION_ID de la réponse :

gcloud healthcare operations describe OPERATION_ID \
  --location=LOCATION \
  --dataset=DATASET_ID

Remplacez les éléments suivants :

  • OPERATION_ID : numéro d'ID renvoyé par la réponse précédente
  • DATASET_ID : nom de l'ensemble de données parent du magasin DICOM
  • LOCATION : emplacement de l'ensemble de données parent du magasin DICOM

Le résultat est le suivant :

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata
  apiMethodName: google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData
  createTime: 'CREATE_TIME'
  endTime: 'END_TIME',
  logsUrl: 'https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL'
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID
response:
  '@type': '...'

API

Pour exporter des métadonnées DICOM vers BigQuery à l'aide d'un filtre, utilisez la méthode projects.locations.datasets.dicomStores.export.

curl

Pour exporter des métadonnées DICOM à l'aide d'un filtre, envoyez une requête POST et spécifiez les informations suivantes :

  • Nom et emplacement de l'ensemble de données parent
  • Le nom du magasin DICOM
  • L'emplacement du fichier de filtre dans un bucket Cloud Storage
  • Le nom de la table d'exportation BigQuery. Le nom ne peut contenir que des lettres (majuscules ou minuscules), des chiffres et des traits de soulignement. Pour en savoir plus sur la manière dont l'API Cloud Healthcare écrit des données dans la table BigQuery, consultez la section Définir la destination BigQuery.
  • 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.

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': {
        'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
      },
      'filterConfig': {
        'resourcePathsGcsUri': 'gs://BUCKET/DIRECTORY/FILTER_FILE'
      },
      'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
    }" "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_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/v1beta1/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.v1beta1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

Pour exporter des métadonnées DICOM à l'aide d'un filtre, envoyez une requête POST et spécifiez les informations suivantes :

  • Nom et emplacement de l'ensemble de données parent
  • Le nom du magasin DICOM
  • L'emplacement du fichier de filtre dans un bucket Cloud Storage
  • Le nom de la table d'exportation BigQuery. Le nom ne peut contenir que des lettres (majuscules ou minuscules), des chiffres et des traits de soulignement. Pour en savoir plus sur la manière dont l'API Cloud Healthcare écrit des données dans la table BigQuery, consultez la section Définir la destination BigQuery.
  • 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.

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': {
      'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
    },
    'filterConfig': {
      'resourcePathsGcsUri': 'gs://BUCKET/DIRECTORY/FILTER_FILE'
    },
    'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
  }" `
  -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_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/v1beta1/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.v1beta1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

Interroger et analyser des données DICOM dans BigQuery

Après avoir exporté les métadonnées DICOM vers BigQuery, vous pouvez exécuter des exemples de requêtes pour obtenir plus de détails sur les métadonnées. Les exemples suivants montrent comment exécuter des requêtes pour certains cas d'utilisation courants.

Rechercher dans les métadonnées

Supposons que vous souhaitiez effectuer une recherche sur une grande quantité de métadonnées difficiles à rechercher dans d'autres systèmes, telles qu'un système d'archivage et de transmission d'images (PACS, Picture Archiving and Communication System) ou une archive fournisseur neutre (VNA, Vendor Neutral Archive). La requête suivante montre comment interroger la valeur PatientID d'un patient et utiliser le chemin DICOMweb pour récupérer des instances d'image spécifiques. L'exemple utilise la table chc-nih-chest-xray.nih_chest_xray.nih_chest_xray de l'ensemble de données radiographiques du thorax du NIH.

#standardSQL
SELECT CONCAT('/dicomWeb/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID) as DICOMwebPath
FROM `chc-nih-chest-xray.nih_chest_xray.nih_chest_xray`
WHERE PatientID = '19045';

La requête renvoie les études associées au patient. La réponse suivante utilise le format JSON :

[
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.169629990647803559688464142879817265366193/series/1.3.6.1.4.1.11129.5.5.141990184899344268273968625887396932057061/instances/1.3.6.1.4.1.11129.5.5.162448513493627342869165322873398445570578"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.114160532832901355654444239008681456919023/series/1.3.6.1.4.1.11129.5.5.178361108150351071908200174504411112440700/instances/1.3.6.1.4.1.11129.5.5.145959606905209488520697484018030440952428"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.177801331756958922168115732894519725643007/series/1.3.6.1.4.1.11129.5.5.134128639331055702643451404466208677561042/instances/1.3.6.1.4.1.11129.5.5.148534317486838863760908141408862094292875"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.119570482687494886334491471870663517807852/series/1.3.6.1.4.1.11129.5.5.148050768676645373034111775531663876425927/instances/1.3.6.1.4.1.11129.5.5.111153708388576066195389700503245704293300"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.144704399171290022427247626928443085419319/series/1.3.6.1.4.1.11129.5.5.190285793344339390593165731988543561416633/instances/1.3.6.1.4.1.11129.5.5.110245902713751842026864359179754889505217"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.172276126220388966649736649950361623806435/series/1.3.6.1.4.1.11129.5.5.171512371498506519035489729484464872160452/instances/1.3.6.1.4.1.11129.5.5.111721417729733087384317002785068394901165"
  }
]

Interroger les dernières études

Supposons que vous souhaitiez remplir une liste de travail de lecture PACS avec les dernières études de votre ensemble de données.

La requête suivante montre comment extraire et afficher les dernières études, ainsi que le nombre d'instances et les métadonnées environnantes. L'exemple utilise la table chc-tcia:lungct_diagnosis.lungct_diagnosis de l'ensemble de données TCIA LungCT-Diagnosis.

#standardSQL
SELECT MIN(CONCAT(StudyDate, ' ', StudyTime)) as StudyDateTime, MIN(PatientID) as PatientID, StudyInstanceUID, COUNT(*) as InstanceCount
FROM `chc-tcia.lungct_diagnosis.lungct_diagnosis`
GROUP BY StudyInstanceUID
ORDER BY StudyDateTime DESC
LIMIT 20;

La requête renvoie les informations suivantes :

  • Les 20 dernières études qui ont été entrées dans le système et la date à laquelle elles ont été entrées
  • Le patient associé à chaque étude
  • L'UID de l'étude
  • Le nombre d'instances associées à l'étude

La réponse suivante utilise le format JSON :

[
  {
    "StudyDateTime": "1998-09-24 07:59:11",
    "PatientID": "R_006",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.203059346048546067166621241946",
    "InstanceCount": "130"
  },
  {
    "StudyDateTime": "1998-09-19 15:02:00",
    "PatientID": "R_168",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.339960057327890022720983572187",
    "InstanceCount": "73"
  },
  {
    "StudyDateTime": "1998-09-03 13:59:23",
    "PatientID": "R_232",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.339835546587977846672632754158",
    "InstanceCount": "74"
  },
  {
    "StudyDateTime": "1998-08-20 09:54:23",
    "PatientID": "R_210",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.296738593990263872210071427126",
    "InstanceCount": "108"
  },
  {
    "StudyDateTime": "1998-08-17 15:22:14",
    "PatientID": "R_053",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.517417975270684537124932347957",
    "InstanceCount": "104"
  },
  {
    "StudyDateTime": "1998-08-03 08:53:02",
    "PatientID": "R_043",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.227672022111453893046049224932",
    "InstanceCount": "111"
  },
  {
    "StudyDateTime": "1998-07-24 10:01:17",
    "PatientID": "R_141",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.179196140853257709306370614304",
    "InstanceCount": "110"
  },
  {
    "StudyDateTime": "1998-06-29 09:18:16",
    "PatientID": "R_069",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.272642986942028254801481747252",
    "InstanceCount": "118"
  },
  {
    "StudyDateTime": "1998-06-27 12:47:58",
    "PatientID": "R_233",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.681962696010777092272412255441",
    "InstanceCount": "65"
  },
  {
    "StudyDateTime": "1998-06-13 11:25:35",
    "PatientID": "R_075",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.905893527127370577828717624475",
    "InstanceCount": "112"
  },
  {
    "StudyDateTime": "1998-06-06 12:16:24",
    "PatientID": "R_029",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.125721920632162119492941634336",
    "InstanceCount": "109"
  },
  {
    "StudyDateTime": "1998-04-30 10:52:34",
    "PatientID": "R_116",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.140526923029511055644251155499",
    "InstanceCount": "115"
  },
  {
    "StudyDateTime": "1998-04-11 08:55:15",
    "PatientID": "R_014",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.231039938881330096566986102847",
    "InstanceCount": "76"
  },
  {
    "StudyDateTime": "1998-04-06 13:48:50",
    "PatientID": "R_061",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.148444392206166653380348096858",
    "InstanceCount": "70"
  },
  {
    "StudyDateTime": "1998-04-05 12:57:54",
    "PatientID": "R_126",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.803397998355063686023109438391",
    "InstanceCount": "71"
  },
  {
    "StudyDateTime": "1998-03-21 13:23:15",
    "PatientID": "R_093",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.201986527949877334068747060981",
    "InstanceCount": "65"
  },
  {
    "StudyDateTime": "1998-03-06 13:27:51",
    "PatientID": "R_065",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.233872568071694592857630274388",
    "InstanceCount": "69"
  },
  {
    "StudyDateTime": "1998-03-06 09:09:43",
    "PatientID": "R_191",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.243097352990517043299166705830",
    "InstanceCount": "76"
  },
  {
    "StudyDateTime": "1998-01-14 14:59:23",
    "PatientID": "R_237",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.213658277730427015624893071198",
    "InstanceCount": "68"
  },
  {
    "StudyDateTime": "1998-01-02 14:00:00",
    "PatientID": "R_078",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.200669196334798686049957852894",
    "InstanceCount": "87"
  }
]

Restrictions et comportements supplémentaires

Les tags DICOM seront répertoriés dans une colonne distincte (appelée DroppedTags.TagName) dans la table BigQuery de destination si le tag DICOM n'est pas d'un type compatible dans BigQuery (répertorié dans la section VR exclues).).

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

Si des erreurs se produisent lors d'une requête d'exportation de métadonnées DICOM vers BigQuery, elles sont consignées dans Cloud Logging. Pour en savoir plus, consultez la page Afficher les journaux d'erreurs dans Cloud Logging.