DICOM-Metadaten nach BigQuery exportieren

Auf dieser Seite wird erläutert, wie Sie DICOM-Metadaten zur Untersuchung und Analyse nach BigQuery exportieren können. Informationen zum BigQuery-Schema, das beim Export von DICOM-Metadaten erstellt wird, finden Sie unter Hintergrundinformationen zum BigQuery-DICOM-Schema.

BigQuery-Berechtigungen festlegen

Bevor Sie DICOM-Metadaten nach BigQuery exportieren, müssen Sie dem Dienstkonto Cloud Healthcare Service Agent zusätzliche Berechtigungen erteilen. Weitere Informationen finden Sie unter BigQuery-Berechtigungen für den DICOM-Speicher.

BigQuery-Ziel festlegen

Verwenden Sie beim Festlegen des BigQuery-Ziels den vollständig qualifizierten URI so:
bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID
Das Verhalten des Exportvorgangs kann abhängig von den folgenden Faktoren variieren:
  • Ob die Zieltabelle bereits vorhanden ist
  • Ob Sie das Feld force (mit der API) oder das Flag --overwrite-table (mit dem gcloud-Befehlszeilentool) festgelegt haben
  • Ob ein Wert für die Aufzählung writeDisposition festgelegt wurde. Wenn Sie die writeDisposition-Aufzählung verwenden, darf das Feld force nicht festgelegt werden.
Das Verhalten in den einzelnen Fällen ist so:
  • Wenn die Zieltabelle bereits vorhanden ist und force auf true gesetzt oder das Flag --overwrite-table angegeben ist, wird die vorhandene Tabelle durch den Exportvorgang überschrieben.
  • Wenn die Zieltabelle bereits vorhanden ist und force auf false gesetzt oder das Flag --overwrite-table nicht angegeben ist, tritt ein Fehler auf.
  • Wenn die Zieltabelle noch nicht vorhanden ist, wird eine neue Tabelle erstellt, unabhängig davon, ob Sie das Feld force oder das Flag --overwrite-table angeben.
  • Das Verhalten von writeDisposition wird in der relevanten Dokumentation beschrieben. Die writeDisposition-Aufzählung verhält sich ähnlich wie die Optionen bei der Verwendung von force, mit folgender Ausnahme: Wenn die Zieltabelle bereits vorhanden und leer ist, wird der Exportvorgang abgeschlossen, statt das ein Fehler zurückgegeben wird.

DICOM-Metadaten exportieren

In den folgenden Beispielen wird gezeigt, wie Sie DICOM-Metadaten in eine BigQuery-Tabelle exportieren. In diesen Beispielen befinden sich der DICOM-Speicher und die BigQuery-Tabelle im selben Projekt. Informationen zum Exportieren von DICOM-Metadaten in ein anderes Projekt finden Sie unter DICOM-Metadaten in ein anderes Projekt exportieren.

Console

So exportieren Sie DICOM-Metadaten nach BigQuery:

  1. Rufen Sie in der Cloud Console die Seite Datasets auf.
    Zur Seite "Datasets"
  2. Klicken Sie auf das Dataset, das den DICOM-Speicher enthält, aus dem Sie DICOM-Metadaten exportieren.
  3. Wählen Sie in der Liste der Datenspeicher aus der Liste Aktionen für den DICOM-Speicher Exportieren aus.
  4. Wählen Sie auf der Seite DICOM-Speicher exportieren die Option BigQuery-Tabelle aus.
  5. Wählen Sie in der Liste Projekt das BigQuery-Projekt aus.
  6. Wählen Sie in der Liste Dataset-ID das Dataset aus.
  7. Geben Sie im Feld Tabellenname einen neuen Tabellennamen ein.
    BigQuery prüft jede Auswahl, um sicherzustellen, dass die Zieltabelle gültig ist.
  8. Klicken Sie auf Exportieren, um DICOM-Metadaten an das definierte Ziel in BigQuery zu exportieren.
  9. Klicken Sie auf den Tab Vorgänge, um den Status des Vorgangs zu verfolgen. Wenn der Vorgang abgeschlossen ist, werden folgende Hinweise angezeigt:
    • Im Abschnitt Status: Lang andauernder Vorgang befindet sich unter der Überschrift OK ein grünes Häkchen.
    • Der Abschnitt Übersicht hat ein grünes Häkchen und einen OK-Indikator in der Zeile, in der sich auch die Vorgangs-ID befindet.
    Wenn Fehler auftreten, klicken Sie auf Aktionen und dann auf Details in Cloud Logging ansehen.

gcloud

Verwenden Sie den Befehl gcloud healthcare dicom-stores export bq, um DICOM-Metadaten nach BigQuery zu exportieren. Geben Sie die folgenden Informationen an:

  • Der Name des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Der Name eines vorhandenen BigQuery-Datasets
  • Ein Name für die BigQuery-Exporttabelle. Der Name darf nur Buchstaben (Groß- und Kleinschreibung), Ziffern und Unterstriche enthalten. Eine Anleitung zum Anpassen des Verhaltens des Exportvorgangs finden Sie unter BigQuery-Ziel festlegen.

Das folgende Beispiel zeigt den Befehl 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]

Nach der Ausführung des Befehls wird der Vorgangsname zurückgegeben:

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

Führen Sie den gcloud healthcare operations describe-Befehl aus und geben Sie OPERATION_ID aus der Antwort an, um weitere Details zum Vorgang aufzurufen:

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

Wenn der Vorgang abgeschlossen ist, enthält die Antwort 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

Verwenden Sie die Methode projects.locations.datasets.dicomStores.export, um DICOM-Metadaten nach BigQuery zu exportieren.

curl

Stellen Sie zum Exportieren von DICOM-Metadaten eine POST-Anfrage und geben Sie die folgenden Informationen an:

  • Name und Speicherort des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Der Name eines vorhandenen BigQuery-Datasets
  • Ein Name für die BigQuery-Exporttabelle. Der Name darf nur Buchstaben (Groß- und Kleinschreibung), Ziffern und Unterstriche enthalten. Eine Anleitung zum Anpassen des Verhaltens des Exportvorgangs finden Sie unter BigQuery-Ziel festlegen.
  • Einer der folgenden Werte für die writeDisposition-Aufzählung:
    • WRITE_EMPTY: Daten werden nur exportiert, wenn die Zieltabellen leer sind. Das ist die Standardeinstellung.
    • WRITE_TRUNCATE: Es werden alle vorhandenen Daten in den Tabellen gelöscht, bevor die Instanzen geschrieben werden.
    • WRITE_APPEND: Daten werden an die vorhandenen Tabellen anfügen.

Das folgende Beispiel zeigt eine POST-Anfrage mit 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"

Wenn die Anfrage erfolgreich ist, gibt der Server die Antwort im JSON-Format zurück:

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

Die Antwort enthält einen Vorgangsnamen. Mit der Methode Operation get können Sie den Status des Vorgangs verfolgen:

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"

Wenn die Anfrage erfolgreich ist, gibt der Server eine Antwort mit dem Status des Vorgangs im JSON-Format zurück:

{
  "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

Stellen Sie zum Exportieren von DICOM-Metadaten eine POST-Anfrage und geben Sie die folgenden Informationen an:

  • Name und Speicherort des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Der Name eines vorhandenen BigQuery-Datasets
  • Ein Name für die BigQuery-Exporttabelle. Der Name darf nur Buchstaben (Groß- und Kleinschreibung), Ziffern und Unterstriche enthalten. Eine Anleitung zum Anpassen des Verhaltens des Exportvorgangs finden Sie unter BigQuery-Ziel festlegen.
  • Einer der folgenden Werte für die writeDisposition-Aufzählung:
    • WRITE_EMPTY: Daten werden nur exportiert, wenn die Zieltabellen leer sind. Das ist die Standardeinstellung.
    • WRITE_TRUNCATE: Es werden alle vorhandenen Daten in den Tabellen gelöscht, bevor die Instanzen geschrieben werden.
    • WRITE_APPEND: Daten werden an die vorhandenen Tabellen anfügen.

Das folgende Beispiel zeigt eine POST-Anfrage mit 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

Wenn die Anfrage erfolgreich ist, gibt der Server die Antwort im JSON-Format zurück:

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

Die Antwort enthält einen Vorgangsnamen. Mit der Methode Operation get können Sie den Status des Vorgangs verfolgen:

$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

Wenn die Anfrage erfolgreich ist, gibt der Server eine Antwort mit dem Status des Vorgangs im JSON-Format zurück:

{
  "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": "..."
  }
}

DICOM-Metadaten in ein anderes Projekt exportieren

Wenn Sie DICOM-Metadaten aus einem Projekt in ein anderes Projekt exportieren möchten, lesen Sie die Informationen unter DICOM-Metadaten in ein anderes Projekt exportieren zum Festlegen von IAM-Berechtigungen im Zielprojekt.

gcloud

Verwenden Sie den Befehl gcloud healthcare dicom-stores export bq, um DICOM-Metadaten aus einem DICOM-Speicher in einem Projekt in eine BigQuery-Tabelle in einem anderen Projekt zu exportieren. Geben Sie die folgenden Informationen an:

  • Der Name des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Das Zielprojekt
  • Der Name eines vorhandenen BigQuery-Datasets im Zielprojekt
  • Ein Name für die BigQuery-Exporttabelle. Der Name darf nur Buchstaben (Groß- und Kleinschreibung), Ziffern und Unterstriche enthalten. Unter BigQuery-Ziel festlegen wird erläutert, wie die Cloud Healthcare API Daten in die BigQuery-Tabelle schreibt.

Das folgende Beispiel zeigt den Befehl 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]

In der Befehlszeile wird die Vorgangs-ID und nach Abschluss des Vorgangs done angezeigt:

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

Führen Sie den gcloud healthcare operations describe-Befehl aus und geben Sie OPERATION_ID aus der Antwort an, um weitere Details zum Vorgang aufzurufen:

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

Wenn der Vorgang abgeschlossen ist, enthält die Antwort 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

Verwenden Sie die Methode projects.locations.datasets.dicomStores.export, um DICOM-Metadaten nach BigQuery zu exportieren.

curl

Wenn Sie DICOM-Metadaten aus einem DICOM-Speicher in einem Projekt in eine BigQuery-Tabelle in einem anderen Projekt exportieren möchten, senden Sie eine POST-Anfrage und geben Sie die folgenden Informationen an:

  • Das Quellprojekt
  • Name und Speicherort des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Das Zielprojekt
  • Der Name eines vorhandenen BigQuery-Datasets im Zielprojekt
  • Ein Name für die BigQuery-Exporttabelle. Der Name darf nur Buchstaben (Groß- und Kleinschreibung), Ziffern und Unterstriche enthalten. Unter BigQuery-Ziel festlegen wird erläutert, wie die Cloud Healthcare API Daten in die BigQuery-Tabelle schreibt.
  • Einer der folgenden Werte für die writeDisposition-Aufzählung:
    • WRITE_EMPTY: Daten werden nur exportiert, wenn die Zieltabellen leer sind. Das ist die Standardeinstellung.
    • WRITE_TRUNCATE: Es werden alle vorhandenen Daten in den Tabellen gelöscht, bevor die Instanzen geschrieben werden.
    • WRITE_APPEND: Daten werden an die vorhandenen Tabellen anfügen.

Das folgende Beispiel zeigt eine POST-Anfrage mit 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"

Wenn die Anfrage erfolgreich ist, gibt der Server die Antwort im JSON-Format zurück:

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

Die Antwort enthält einen Vorgangsnamen. Mit der Methode Operation get können Sie den Status des Vorgangs verfolgen:

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"

Wenn die Anfrage erfolgreich ist, gibt der Server eine Antwort mit dem Status des Vorgangs im JSON-Format zurück:

{
  "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

Wenn Sie DICOM-Metadaten aus einem DICOM-Speicher in einem Projekt in eine BigQuery-Tabelle in einem anderen Projekt exportieren möchten, senden Sie eine POST-Anfrage und geben Sie die folgenden Informationen an:

  • Das Quellprojekt
  • Name und Speicherort des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Das Zielprojekt
  • Der Name eines vorhandenen BigQuery-Datasets im Zielprojekt
  • Ein Name für die BigQuery-Exporttabelle. Der Name darf nur Buchstaben (Groß- und Kleinschreibung), Ziffern und Unterstriche enthalten. Unter BigQuery-Ziel festlegen wird erläutert, wie die Cloud Healthcare API Daten in die BigQuery-Tabelle schreibt.
  • Einer der folgenden Werte für die writeDisposition-Aufzählung:
    • WRITE_EMPTY: Daten werden nur exportiert, wenn die Zieltabellen leer sind. Das ist die Standardeinstellung.
    • WRITE_TRUNCATE: Es werden alle vorhandenen Daten in den Tabellen gelöscht, bevor die Instanzen geschrieben werden.
    • WRITE_APPEND: Daten werden an die vorhandenen Tabellen anfügen.

Das folgende Beispiel zeigt eine POST-Anfrage mit 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

Wenn die Anfrage erfolgreich ist, gibt der Server die Antwort im JSON-Format zurück:

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

Die Antwort enthält einen Vorgangsnamen. Mit der Methode Operation get können Sie den Status des Vorgangs verfolgen:

$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

Wenn die Anfrage erfolgreich ist, gibt der Server eine Antwort mit dem Status des Vorgangs im JSON-Format zurück:

{
  "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": "..."
  }
}

DICOM-Metadaten mit Filtern exportieren

Wenn Sie DICOM-Dateien nach Cloud Storage exportieren, werden standardmäßig alle DICOM-Dateien im angegebenen DICOM-Speicher exportiert. Ebenso werden beim Exportieren von DICOM-Metadaten nach BigQuery die Metadaten für alle DICOM-Daten im angegebenen DICOM-Speicher exportiert.

Sie können einen Teil der DICOM- oder Metadaten mithilfe eines Filters exportieren. Sie definieren diesen Filter in einer Filterdatei.

Filterdateien konfigurieren

In einer Filterdatei wird definiert, welche DICOM-Dateien nach Cloud Storage oder BigQuery exportiert werden sollen. Sie können Filterdateien auf den folgenden Ebenen konfigurieren:

  • Auf der Studienebene
  • Für die Reihe
  • Auf Instanzebene

Eine Filterdatei besteht aus mehreren Zeilen, wobei jede Zeile die Studie, Reihe oder Instanz definiert, die Sie exportieren möchten. Jede Zeile hat das Format /studies/STUDY_UID[/series/SERIES_UID[/instances/INSTANCE_UID]].

Wenn in der Filterdatei bei deren Übergabe keine Studie, Reihe oder Instanz angegeben ist, wird diese Studie, Reihe oder Instanz nicht exportiert.

Nur der Teil /studies/STUDY_UID des Pfads ist erforderlich. Sie können eine gesamte Studie durch Angabe von /studies/STUDY_UID oder eine ganze Reihe durch Angabe von /studies/STUDY_UID/series/SERIES_UID exportieren.

Betrachten Sie die folgende Filterdatei. Die Filterdatei bedingt, dass eine Studie, zwei Reihen und drei einzelnen Instanzen exportiert werden:

/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

Filterdatei mit BigQuery erstellen

Normalerweise exportieren Sie zuerst die Metadaten aus einem DICOM-Speicher in BigQuery, um eine Filterdatei zu erstellen. Sie können BigQuery verwenden, um die Studien-, Series- und Instanz-UIDs der DICOM-Daten in Ihrem DICOM-Speicher anzuzeigen. Danach können Sie folgende Schritte ausführen:

  1. Fragen Sie nach den Studien-, Serien- und Instanz-UIDs, die Sie interessieren. Nachdem Sie beispielsweise die DICOM-Metadaten in BigQuery exportiert haben, können Sie die folgende Abfrage ausführen, um die Studien-, Serien- und Instanz-UIDs in einem Format zu verketten, das mit den Anforderungen der Filterdatei kompatibel ist:
    SELECT CONCAT
        ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
        [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
    
  2. Wenn die Abfrage eine große Ergebnismenge zurückgibt, können Sie eine neue Tabelle materialisieren, indem Sie die Abfrageergebnisse in einer Zieltabelle in BigQuery speichern.
  3. Wenn Sie die Abfrageergebnisse in einer Zieltabelle speichern, können Sie den Inhalt der Zieltabelle in einer Datei speichern und nach Cloud Storage exportieren. Die erforderlichen Schritte finden Sie unter Tabellendaten exportieren. Die exportierte Datei ist Ihre Filterdatei. Sie verwenden den Speicherort der Filterdatei in Cloud Storage, wenn Sie den Filter im Exportvorgang angeben.

Filterdatei manuell erstellen

Sie können eine Filterdatei mit benutzerdefinierten Inhalten erstellen und diese in einen Cloud Storage-Bucket hochladen. Sie verwenden den Speicherort der Filterdatei in Cloud Storage, wenn Sie den Filter im Exportvorgang angeben. Im folgenden Beispiel wird gezeigt, wie Sie mit dem Befehl gsutil cp eine Filterdatei in einen Cloud Storage-Bucket hochladen:
gsutil cp PATH/TO/FILTER_FILE gs://BUCKET/DIRECTORY

Filterdatei übergeben

Nachdem Sie eine Filterdatei erstellt haben, können Sie den DICOM-Exportvorgang aufrufen und die Filterdatei mit der REST API übergeben. In folgenden Beispielen wird gezeigt, wie Sie DICOM-Metadaten mit einem Filter exportieren.

gcloud

Verwenden Sie den gcloud beta healthcare dicom-stores export bq-Befehl, um DICOM-Metadaten mit einem Filters nach BigQuery zu exportieren:

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

Ersetzen Sie Folgendes:

  • DICOM_STORE_ID: die Kennung für den DICOM-Speicher
  • DATASET_ID: den Namen des übergeordneten Datasets des DICOM-Speichers
  • LOCATION: den Speicherort des übergeordneten Datasets des DICOM-Speichers
  • PROJECT_ID: die ID des Projekts, das das BigQuery-Dataset enthält
  • BIGQUERY_DATASET_ID: den Namen des BigQuery-Datasets
  • BIGQUERY_TABLE_ID: einen Namen für die BigQuery-Exporttabelle. Der Name darf nur Buchstaben (Groß- und Kleinschreibung), Ziffern und Unterstriche enthalten. Unter BigQuery-Ziel festlegen wird erläutert, wie die Cloud Healthcare API Daten in die BigQuery-Tabelle schreibt.
  • BUCKET/DIRECTORY/FILTER_FILE: den Speicherort der Filterdatei in einem Cloud Storage-Bucket

Die Ausgabe sieht so aus:

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

Führen Sie den gcloud healthcare operations describe-Befehl aus und geben Sie OPERATION_ID aus der Antwort an, um den Status des Vorgangs anzuzeigen:

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

Ersetzen Sie Folgendes:

  • OPERATION_ID: die ID-Nummer, die von der vorherigen Antwort zurückgegeben wurde
  • DATASET_ID: den Namen des übergeordneten Datasets des DICOM-Speichers
  • LOCATION: den Speicherort des übergeordneten Datasets des DICOM-Speichers

Die Ausgabe sieht so aus:

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

Verwenden Sie die projects.locations.datasets.dicomStores.export-Methode, um DICOM-Metadaten mit einem Filters nach BigQuery zu exportieren.

curl

Wenn Sie DICOM-Metadaten mithilfe eines Filters exportieren möchten, senden Sie eine POST-Anfrage und geben folgende Informationen an:

  • Name und Speicherort des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Speicherort der Filterdatei in einem Cloud Storage-Bucket
  • Ein Name für die BigQuery-Exporttabelle. Der Name darf nur Buchstaben (Groß- und Kleinschreibung), Ziffern und Unterstriche enthalten. Unter BigQuery-Ziel festlegen wird erläutert, wie die Cloud Healthcare API Daten in die BigQuery-Tabelle schreibt.
  • Einer der folgenden Werte für die writeDisposition-Aufzählung:
    • WRITE_EMPTY: Daten werden nur exportiert, wenn die Zieltabellen leer sind. Das ist die Standardeinstellung.
    • WRITE_TRUNCATE: Es werden alle vorhandenen Daten in den Tabellen gelöscht, bevor die Instanzen geschrieben werden.
    • WRITE_APPEND: Daten werden an die vorhandenen Tabellen anfügen.

Das folgende Beispiel zeigt eine POST-Anfrage mit 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"

Wenn die Anfrage erfolgreich ist, gibt der Server die Antwort im JSON-Format zurück:

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

Die Antwort enthält einen Vorgangsnamen. Mit der Methode Operation get können Sie den Status des Vorgangs verfolgen:

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"

Wenn die Anfrage erfolgreich ist, gibt der Server eine Antwort mit dem Status des Vorgangs im JSON-Format zurück:

{
  "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

Wenn Sie DICOM-Metadaten mithilfe eines Filters exportieren möchten, senden Sie eine POST-Anfrage und geben folgende Informationen an:

  • Name und Speicherort des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Der Speicherort der Filterdatei in einem Cloud Storage-Bucket.
  • Ein Name für die BigQuery-Exporttabelle. Der Name darf nur Buchstaben (Groß- und Kleinschreibung), Ziffern und Unterstriche enthalten. Unter BigQuery-Ziel festlegen wird erläutert, wie die Cloud Healthcare API Daten in die BigQuery-Tabelle schreibt.
  • Einer der folgenden Werte für die writeDisposition-Aufzählung:
    • WRITE_EMPTY: Daten werden nur exportiert, wenn die Zieltabellen leer sind. Das ist die Standardeinstellung.
    • WRITE_TRUNCATE: Es werden alle vorhandenen Daten in den Tabellen gelöscht, bevor die Instanzen geschrieben werden.
    • WRITE_APPEND: Daten werden an die vorhandenen Tabellen anfügen.

Das folgende Beispiel zeigt eine POST-Anfrage mit 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

Wenn die Anfrage erfolgreich ist, gibt der Server die Antwort im JSON-Format zurück:

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

Die Antwort enthält einen Vorgangsnamen. Mit der Methode Operation get können Sie den Status des Vorgangs verfolgen:

$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

Wenn die Anfrage erfolgreich ist, gibt der Server eine Antwort mit dem Status des Vorgangs im JSON-Format zurück:

{
  "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": "..."
  }
}

DICOM-Daten in BigQuery abfragen und analysieren

Nachdem Sie die DICOM-Metadaten nach BigQuery exportiert haben, können Sie Beispielabfragen ausführen, um weitere Details zu den Metadaten zu erhalten. Die folgenden Beispiele zeigen, wie Sie Abfragen für einige gängige Anwendungsfälle ausführen.

In Metadaten suchen

Angenommen, Sie möchten in einer großen Menge von Metadaten suchen, was in anderen Systemen schwierig wäre, z. B. in einem Bildarchivierungs- und Kommunikationssystem (Picture Archive and Communication System, PACS) oder in einem anbieterneutralen Archiev (Vendor Neutral Archive, VNA). Folgende Abfrage zeigt, wie Sie den PatientID-Wert eines Patienten abfragen und den DICOMweb-Pfad nutzen, um bestimmte Image-Instanzen abzurufen. Das Beispiel nutzt die Tabelle chc-nih-chest-xray.nih_chest_xray.nih_chest_xray aus dem NIH-Dataset: Röntgenaufnahmen des Brustkorbs.

#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';

Die Abfrage gibt die mit dem Patienten verknüpften Studien zurück. Die folgende Antwort verwendet das JSON-Format:

[
  {
    "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"
  }
]

Neueste Studien abfragen

Angenommen, Sie möchten eine PACS-Leseliste mit den neuesten Studien aus Ihrem Dataset füllen.

Die folgende Abfrage zeigt, wie Sie neueste Studien zusammen mit der Instanzanzahl und den umgebenden Metadaten abrufen und anzeigen. Das Beispiel nutzt die Tabelle chc-tcia:lungct_diagnosenosis.lungct_diagnosenosis aus dem Dataset: TCIA LungCT-Diagnose.

#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;

Die Abfrage gibt folgende Informationen zurück:

  • Die 20 aktuellsten Studien, die in das System aufgenommen wurden, und die Zeit der Aufnahme
  • Der mit den Studien verknüpften Patienten
  • Die UID der Studie
  • Die Anzahl der Instanzen, die mit der Studie verknüpft sind

Die folgende Antwort verwendet das JSON-Format:

[
  {
    "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"
  }
]

Einschränkungen und zusätzliches Verhalten

DICOM-Tags werden in einer separaten Spalte mit dem Namen DroppedTags.TagName in der BigQuery-Zieltabelle aufgelistet, wenn für das DICOM-Tag kein unterstützter Typ in BigQuery vorhanden ist (siehe Ausgeschlossene VRs).

Fehlerbehebung bei DICOM-Exportanfragen

Wenn Fehler während einer DICOM-Anfrage zum Exportieren von Metadaten nach BigQuery auftreten, werden die Fehler in Cloud Logging protokolliert. Weitere Informationen finden Sie unter Fehlerlogs in Cloud Logging ansehen.