Esportazione dei metadati DICOM in BigQuery

In questa pagina viene spiegato come esportare i metadati DICOM in BigQuery ai fini dell'approfondimento e dell'analisi. Per informazioni sullo schema BigQuery creato durante l'esportazione dei metadati DICOM, consulta Informazioni sullo schema DICOM di BigQuery.

Impostazione delle autorizzazioni BigQuery

Prima di esportare i metadati DICOM in BigQuery, devi concedere autorizzazioni aggiuntive all'account di servizio dell'agente di servizio Cloud Healthcare. Per ulteriori informazioni, consulta Autorizzazioni BigQuery per l'archiviazione DICOM.

Impostazione della destinazione BigQuery

Quando imposti la destinazione BigQuery, utilizza l'URI completo, in questo modo:
bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID
Il comportamento dell'esportazione può variare a seconda di:
  • Se la tabella della destinazione esiste già
  • Se hai impostato il campo force (utilizzando l'API) o il flag --overwrite-table (utilizzando l'interfaccia a riga di comando di Google Cloud)
  • Indica se hai impostato un valore per l'enumerazione di writeDisposition. Se utilizzi l'enumerazione di writeDisposition, non impostare il campo force.
Il comportamento in ciascuno di questi casi è il seguente:
  • Se la tabella di destinazione esiste già e force è impostato su true o è stato specificato il flag --overwrite-table, l'operazione di esportazione sovrascrive la tabella esistente.
  • Se la tabella della destinazione esiste già e l'opzione force è impostata su false oppure il flag --overwrite-table non è specificato, si verifica un errore.
  • Se la tabella della destinazione non esiste già, viene creata una nuova tabella indipendentemente dal fatto che tu specifichi il campo force o il flag --overwrite-table.
  • Il comportamento per writeDisposition è descritto nella relativa documentazione. L'enumerazione di writeDisposition esegue un comportamento simile alle opzioni quando si utilizza force, con la seguente eccezione: se la tabella di destinazione esiste già ed è vuota, l'operazione di esportazione viene completata anziché restituire un errore.

Esportazione dei metadati DICOM

Gli esempi riportati di seguito mostrano come esportare i metadati DICOM in una tabella BigQuery. In questi esempi, l'archivio DICOM e la tabella BigQuery si trovano nello stesso progetto. Per esportare i metadati DICOM in un altro progetto, vedi Esportazione dei metadati DICOM in un progetto diverso.

console

Per esportare i metadati DICOM in BigQuery, completa i seguenti passaggi:

  1. Nella console, vai alla pagina Set di dati.
    Vai alla pagina Set di dati
  2. Fai clic sul set di dati contenente l'archivio DICOM da cui stai esportando i metadati DICOM.
  3. Nell'elenco dei datastore, scegli Esporta dall'elenco Azioni per l'archivio DICOM.
  4. Nella pagina Esporta archivio DICOM visualizzato, seleziona Tabella BigQuery.
  5. Nell'elenco Progetto, seleziona il progetto BigQuery.
  6. Nell'elenco ID set di dati, seleziona il set di dati.
  7. Nel campo Nome tabella, inserisci un nuovo nome per la tabella.
    BigQuery controlla ogni selezione per garantire che la tabella sia valida.
  8. Nella sezione Opzioni di output di BigQuery, seleziona una delle seguenti opzioni:
    • Aggiungi dati alle tabelle esistenti: equivale al valore WRITE_APPEND per il parametro writeDisposition.
    • Elimina i dati esistenti nelle tabelle DICOM di destinazione nel set di dati prima di esportare le risorse: equivale al valore WRITE_TRUNCATE per il parametro writeDisposition.
  9. Fai clic su Esporta per esportare i metadati DICOM nella destinazione definita in BigQuery.
  10. Per monitorare lo stato dell'operazione, fai clic sulla scheda Operazioni. Al termine dell'operazione, vengono visualizzate le seguenti indicazioni:
    • La sezione Stato operazione a lunga esecuzione è contrassegnata da un segno di spunta verde sotto l'intestazione OK.
    • La sezione Panoramica contiene un segno di spunta verde e un indicatore OK nella stessa riga dell'ID operazione.
    Se si verificano errori, fai clic su Azioni e quindi su Visualizza dettagli in Cloud Logging.

gcloud

Per esportare i metadati DICOM in BigQuery, utilizza il comando gcloud healthcare dicom-stores export bq. Specifica le seguenti informazioni:

  • Il nome del set di dati padre
  • Il nome dell'archivio DICOM
  • Il nome di un set di dati BigQuery esistente
  • Un nome per la tabella di esportazione di BigQuery. Il nome può contenere solo lettere (maiuscole o minuscole), numeri e trattini bassi. Consulta la sezione relativa all'impostazione della destinazione di BigQuery per una spiegazione di come personalizzare il comportamento dell'operazione di esportazione.

L'esempio seguente mostra il comando 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]

Dopo aver eseguito il comando, viene restituito il nome dell'operazione:

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

Per visualizzare ulteriori dettagli sull'operazione, esegui il comando gcloud healthcare operations describe e fornisci OPERATION_ID nella risposta:

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

Al termine dell'operazione, la risposta include 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': '...'

Server

Per esportare i metadati DICOM in BigQuery, utilizza il metodo projects.locations.datasets.dicomStores.export.

Curling

Per esportare i metadati DICOM, effettua una richiesta POST e specifica le seguenti informazioni:

  • Il nome e la posizione del set di dati padre
  • Il nome dell'archivio DICOM
  • Il nome di un set di dati BigQuery esistente
  • Un nome per la tabella di esportazione di BigQuery. Il nome può contenere solo lettere (maiuscole o minuscole), numeri e trattini bassi. Consulta la sezione relativa all'impostazione della destinazione di BigQuery per una spiegazione di come personalizzare il comportamento dell'operazione di esportazione.
  • Uno dei seguenti valori per l'enumerazione di writeDisposition:
    • WRITE_EMPTY: esporta i dati solo se le tabelle di destinazione sono vuote. Questa è l'impostazione predefinita.
    • WRITE_TRUNCATE: cancella tutti i dati esistenti nelle tabelle prima di scrivere le istanze.
    • WRITE_APPEND: aggiunge dati alle tabelle esistenti.

L'esempio seguente mostra una richiesta POST che utilizza 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"

Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:

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

La risposta contiene il nome di un'operazione. Per monitorare lo stato dell'operazione, puoi utilizzare il metodo Operazione 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"

Se la richiesta ha esito positivo, il server restituisce una risposta con lo stato dell'operazione in formato 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/query/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

Per esportare i metadati DICOM, effettua una richiesta POST e specifica le seguenti informazioni:

  • Il nome e la posizione del set di dati padre
  • Il nome dell'archivio DICOM
  • Il nome di un set di dati BigQuery esistente
  • Un nome per la tabella di esportazione di BigQuery. Il nome può contenere solo lettere (maiuscole o minuscole), numeri e trattini bassi. Consulta la sezione relativa all'impostazione della destinazione di BigQuery per una spiegazione di come personalizzare il comportamento dell'operazione di esportazione.
  • Uno dei seguenti valori per l'enumerazione di writeDisposition:
    • WRITE_EMPTY: esporta i dati solo se le tabelle di destinazione sono vuote. Questa è l'impostazione predefinita.
    • WRITE_TRUNCATE: cancella tutti i dati esistenti nelle tabelle prima di scrivere le istanze.
    • WRITE_APPEND: aggiunge dati alle tabelle esistenti.

L'esempio seguente mostra una richiesta POST che utilizza 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

Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:

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

La risposta contiene il nome di un'operazione. Per monitorare lo stato dell'operazione, puoi utilizzare il metodo get dell'operazione:

$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

Se la richiesta ha esito positivo, il server restituisce una risposta con lo stato dell'operazione in formato 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/query/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

Esportazione dei metadati DICOM in un progetto diverso

Per esportare i metadati DICOM da un progetto a un altro, per prima cosa consulta Esportazione dei metadati DICOM in un progetto diverso per informazioni su come impostare le autorizzazioni IAM nel progetto di destinazione.

gcloud

Per esportare i metadati DICOM da un archivio DICOM in un progetto a una tabella BigQuery in un altro progetto, utilizza il comando gcloud healthcare dicom-stores export bq. Specifica le seguenti informazioni:

  • Il nome del set di dati padre
  • Il nome dell'archivio DICOM
  • Progetto di destinazione
  • Il nome di un set di dati BigQuery esistente nel progetto di destinazione
  • Un nome per la tabella di esportazione di BigQuery. Il nome può contenere solo lettere (maiuscole o minuscole), numeri e trattini bassi. Consulta Impostare la destinazione BigQuery per una spiegazione di come l'API Cloud Healthcare scrive i dati nella tabella BigQuery.

L'esempio seguente mostra il comando 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 riga di comando mostra l'ID operazione e, al termine dell'operazione, 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

Per visualizzare ulteriori dettagli sull'operazione, esegui il comando gcloud healthcare operations describe e fornisci OPERATION_ID nella risposta:

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

Al termine dell'operazione, la risposta include 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': '...'

Server

Per esportare i metadati DICOM in BigQuery, utilizza il metodo projects.locations.datasets.dicomStores.export.

Curling

Per esportare i metadati DICOM da un archivio DICOM in un progetto a una tabella BigQuery in un altro progetto, effettua una richiesta POST e specifica le seguenti informazioni:

  • Progetto di origine
  • Il nome e la posizione del set di dati padre
  • Il nome dell'archivio DICOM
  • Progetto di destinazione
  • Il nome di un set di dati BigQuery esistente nel progetto di destinazione
  • Un nome per la tabella di esportazione di BigQuery. Il nome può contenere solo lettere (maiuscole o minuscole), numeri e trattini bassi. Consulta Impostare la destinazione BigQuery per una spiegazione di come l'API Cloud Healthcare scrive i dati nella tabella BigQuery.
  • Uno dei seguenti valori per l'enumerazione di writeDisposition:
    • WRITE_EMPTY: esporta i dati solo se le tabelle di destinazione sono vuote. Questa è l'impostazione predefinita.
    • WRITE_TRUNCATE: cancella tutti i dati esistenti nelle tabelle prima di scrivere le istanze.
    • WRITE_APPEND: aggiunge dati alle tabelle esistenti.

L'esempio seguente mostra una richiesta POST che utilizza 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"

Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:

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

La risposta contiene il nome di un'operazione. Per monitorare lo stato dell'operazione, puoi utilizzare il metodo Operazione 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"

Se la richiesta ha esito positivo, il server restituisce una risposta con lo stato dell'operazione in formato 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/query/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

Per esportare i metadati DICOM da un archivio DICOM in un progetto a una tabella BigQuery in un altro progetto, effettua una richiesta POST e specifica le seguenti informazioni:

  • Progetto di origine
  • Il nome e la posizione del set di dati padre
  • Il nome dell'archivio DICOM
  • Progetto di destinazione
  • Il nome di un set di dati BigQuery esistente nel progetto di destinazione
  • Un nome per la tabella di esportazione di BigQuery. Il nome può contenere solo lettere (maiuscole o minuscole), numeri e trattini bassi. Consulta Impostare la destinazione BigQuery per una spiegazione di come l'API Cloud Healthcare scrive i dati nella tabella BigQuery.
  • Uno dei seguenti valori per l'enumerazione di writeDisposition:
    • WRITE_EMPTY: esporta i dati solo se le tabelle di destinazione sono vuote. Questa è l'impostazione predefinita.
    • WRITE_TRUNCATE: cancella tutti i dati esistenti nelle tabelle prima di scrivere le istanze.
    • WRITE_APPEND: aggiunge dati alle tabelle esistenti.

L'esempio seguente mostra una richiesta POST che utilizza 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

Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:

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

La risposta contiene il nome di un'operazione. Per monitorare lo stato dell'operazione, puoi utilizzare il metodo Operazione 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

Se la richiesta ha esito positivo, il server restituisce una risposta con lo stato dell'operazione in formato 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/query/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

Esportazione dei metadati DICOM mediante filtri

Per impostazione predefinita, quando esporti file DICOM in Cloud Storage, vengono esportati tutti i file DICOM nell'archivio DICOM specificato. Allo stesso modo, quando esporti i metadati DICOM in BigQuery, vengono esportati i metadati per tutti i dati DICOM nell'archivio DICOM specificato.

Puoi esportare un sottoinsieme di metadati o dati DICOM utilizzando un filtro. Puoi definire il filtro in un file filtro.

Configurazione dei file di filtro

Un file di filtro definisce quali file DICOM esportare in Cloud Storage o BigQuery. Puoi configurare i file di filtro ai seguenti livelli:

  • A livello di studio
  • A livello di serie
  • A livello di istanza

Il file filtro è composto da più righe e ognuna delle quali definisce lo studio, la serie o l'istanza che vuoi esportare. Ogni riga utilizza il formato /studies/STUDY_UID[/series/SERIES_UID[/instances/INSTANCE_UID]].

Se lo studio, la serie o l'istanza non sono specificati nel file del filtro quando trasmetti il file del filtro, tale studio, serie o istanza non verrà esportato.

È obbligatoria solo la porzione /studies/STUDY_UID del percorso. Puoi esportare un intero studio specificando /studies/STUDY_UID oppure un'intera serie specificando /studies/STUDY_UID/series/SERIES_UID.

Valuta la possibilità del seguente file di filtro. Il file filtro comporterà l'esportazione di uno studio, due serie e tre istanze singole:

/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

Creazione di un file di filtro con BigQuery

In genere, devi creare un file di filtro esportando prima i metadati da un archivio DICOM a BigQuery. Questo ti consente di utilizzare BigQuery per visualizzare gli UID di studio, serie e istanze dei dati DICOM nel tuo archivio DICOM. Puoi quindi completare i seguenti passaggi:

  1. Interroga gli UID dello studio, della serie e dell'istanza che ti interessano. Ad esempio, dopo aver esportato i metadati DICOM in BigQuery, potresti eseguire la query seguente per concatenare gli UID di studio, serie e istanze in un formato compatibile con i requisiti del file filtro:
    SELECT CONCAT
        ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
        [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
    
  2. Se la query restituisce un set di risultati di grandi dimensioni, puoi materializzare una nuova tabella salvando i risultati della query in una tabella di destinazione in BigQuery.
  3. Se hai salvato i risultati della query in una tabella di destinazione, puoi salvarne i contenuti in un file ed esportarli in Cloud Storage. Per le istruzioni su come fare, consulta Esportazione dei dati della tabella. Il file esportato è il file del filtro. Devi utilizzare la posizione del file di filtro in Cloud Storage quando specifichi il filtro nell'operazione di esportazione.

Creare manualmente un file di filtro

Puoi creare un file di filtro con contenuti personalizzati e caricarlo in un bucket Cloud Storage. Puoi utilizzare la posizione del file di filtro in Cloud Storage quando specifica il filtro nell'operazione di esportazione. L'esempio seguente mostra come caricare un file di filtro in un bucket Cloud Storage utilizzando il comando gsutil cp:
gsutil cp PATH/TO/FILTER_FILE gs://BUCKET/DIRECTORY

Trasmettere il file del filtro

Dopo aver creato un file di filtro, puoi chiamare l'operazione di esportazione DICOM e passare il file di filtro utilizzando l'API REST. I seguenti esempi mostrano come esportare i metadati DICOM utilizzando un filtro.

gcloud

Per esportare i metadati DICOM in BigQuery utilizzando un filtro, utilizza il comando 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

Sostituisci quanto segue:

  • DICOM_STORE_ID: identificatore per l'archivio DICOM
  • DATASET_ID: nome del set di dati principale dell'archivio DICOM
  • LOCATION: la posizione del set di dati principale dell'archivio DICOM
  • PROJECT_ID: l'identificatore del progetto contenente il set di dati BigQuery
  • BIGQUERY_DATASET_ID: il nome del set di dati BigQuery
  • BIGQUERY_TABLE_ID: un nome per la tabella di esportazione di BigQuery. Il nome può contenere solo lettere (maiuscole o minuscole), numeri e trattini bassi. Consulta Impostare la destinazione BigQuery per una spiegazione di come l'API Cloud Healthcare scrive i dati nella tabella BigQuery.
  • BUCKET/DIRECTORY/FILTER_FILE: la posizione del file del filtro in un bucket Cloud Storage

L'output è il seguente:

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

Per visualizzare lo stato dell'operazione, esegui il comando gcloud healthcare operations describe e fornisci OPERATION_ID nella risposta:

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

Sostituisci quanto segue:

  • OPERATION_ID: il numero identificativo restituito dalla risposta precedente.
  • DATASET_ID: nome del set di dati principale dell'archivio DICOM
  • LOCATION: la posizione del set di dati principale dell'archivio DICOM

L'output è il seguente:

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/query/CLOUD_LOGGING_URL'
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID
response:
  '@type': '...'

Server

Per esportare i metadati DICOM in BigQuery utilizzando un filtro, utilizza il metodo projects.locations.datasets.dicomStores.export.

Curling

Per esportare i metadati DICOM utilizzando un filtro, effettua una richiesta POST e specifica le seguenti informazioni:

  • Il nome e la posizione del set di dati padre
  • Il nome dell'archivio DICOM
  • La posizione del file del filtro in un bucket Cloud Storage
  • Un nome per la tabella di esportazione di BigQuery. Il nome può contenere solo lettere (maiuscole o minuscole), numeri e trattini bassi. Consulta Impostare la destinazione BigQuery per una spiegazione di come l'API Cloud Healthcare scrive i dati nella tabella BigQuery.
  • Uno dei seguenti valori per l'enumerazione di writeDisposition:
    • WRITE_EMPTY: esporta i dati solo se le tabelle di destinazione sono vuote. Questa è l'impostazione predefinita.
    • WRITE_TRUNCATE: cancella tutti i dati esistenti nelle tabelle prima di scrivere le istanze.
    • WRITE_APPEND: aggiunge dati alle tabelle esistenti.

L'esempio seguente mostra una richiesta POST che utilizza 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"

Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:

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

La risposta contiene il nome di un'operazione. Per monitorare lo stato dell'operazione, puoi utilizzare il metodo Operazione 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"

Se la richiesta ha esito positivo, il server restituisce una risposta con lo stato dell'operazione in formato 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/query/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

Per esportare i metadati DICOM utilizzando un filtro, effettua una richiesta POST e specifica le seguenti informazioni:

  • Il nome e la posizione del set di dati padre
  • Il nome dell'archivio DICOM
  • La posizione del file del filtro in un bucket Cloud Storage.
  • Un nome per la tabella di esportazione di BigQuery. Il nome può contenere solo lettere (maiuscole o minuscole), numeri e trattini bassi. Consulta Impostare la destinazione BigQuery per una spiegazione di come l'API Cloud Healthcare scrive i dati nella tabella BigQuery.
  • Uno dei seguenti valori per l'enumerazione di writeDisposition:
    • WRITE_EMPTY: esporta i dati solo se le tabelle di destinazione sono vuote. Questa è l'impostazione predefinita.
    • WRITE_TRUNCATE: cancella tutti i dati esistenti nelle tabelle prima di scrivere le istanze.
    • WRITE_APPEND: aggiunge dati alle tabelle esistenti.

L'esempio seguente mostra una richiesta POST che utilizza 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

Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:

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

La risposta contiene il nome di un'operazione. Per monitorare lo stato dell'operazione, puoi utilizzare il metodo get dell'operazione:

$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

Se la richiesta ha esito positivo, il server restituisce una risposta con lo stato dell'operazione in formato 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/query/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

Esecuzione di query e analisi dei dati DICOM in BigQuery

Dopo aver esportato i metadati DICOM in BigQuery, puoi eseguire query di esempio per ottenere maggiori dettagli sui metadati. I seguenti esempi mostrano come eseguire query per alcuni casi d'uso comuni.

Ricerca nei metadati

Supponiamo che tu voglia eseguire una ricerca in una grande quantità di metadati che sia difficile da cercare in altri sistemi, ad esempio un sistema PACS (Picture Archived and Communication) o un NAS (Vendor Neutral Archive). La seguente query mostra come eseguire una query sul valore PatientID di un paziente e utilizzare il percorso DICOMweb per recuperare istanze di immagini specifiche. Nell'esempio viene usata la tabella chc-nih-chest-xray.nih_chest_xray.nih_chest_xray del set di dati NIH Chest X-ray.

#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 query restituisce gli studi associati al paziente. La seguente risposta utilizza la formattazione 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"
  }
]

Esecuzione di query per gli studi più recenti

Supponi di voler completare un elenco di lavoro di lettura PACS con gli studi più recenti del tuo set di dati.

La query seguente mostra come recuperare e visualizzare gli studi più recenti, il conteggio delle istanze e i metadati circostanti. Nell'esempio viene usata la tabella chc-tcia:lungct_diagnosis.lungct_diagnosis del set di dati 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 query restituisce le seguenti informazioni:

  • I 20 studi più recenti entrati nel sistema e quando sono entrati nel sistema
  • Il paziente associato a ogni studio
  • L'UID dello studio
  • Il numero di istanze associate allo studio

La seguente risposta utilizza la formattazione 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"
  }
]

Limitazioni e comportamento aggiuntivo

I tag DICOM saranno elencati in una colonna separata (chiamata DroppedTags.TagName) nella tabella BigQuery di destinazione se il tag DICOM non ha un tipo supportato in BigQuery (elencato in VR escluse).

Risoluzione dei problemi relativi alle richieste di esportazione DICOM

Se si verificano errori durante una richiesta di esportazione DICOM in BigQuery, gli errori vengono registrati in Cloud Logging. Per ulteriori informazioni, consulta la sezione relativa alla visualizzazione dei log degli errori in Cloud Logging.