Transmitir cambios de recursos FHIR a BigQuery

En esta página, se explica cómo configurar un almacén de FHIR para exportar automáticamente de FHIR a las tablas de BigQuery cada vez que se crea, actualiza se aplican parches o se borran. Este proceso se llama transmisión de BigQuery.

Puedes usar la transmisión de BigQuery para lo siguiente:

  • Sincronizar los datos en un almacén de FHIR con un conjunto de datos de BigQuery cerca de en tiempo real.
  • Realiza consultas complejas sobre datos FHIR sin necesidad de exportarlos a BigQuery cada vez que quieras analizar los datos.

Para mejorar el rendimiento de las consultas y reducir los costos, puedes configurar BigQuery transmitir a tablas particionadas. Para consulta Transmite recursos de FHIR a tablas particionadas.

Antes de comenzar

Leído Exporta recursos de FHIR a BigQuery para entender cómo funciona el proceso de exportación.

Limitaciones

Si importas recursos de FHIR desde Cloud Storage, haz lo siguiente: los cambios no se transmiten a BigQuery.

Configura permisos de BigQuery

Para habilitar la transmisión de BigQuery, debes otorgar permisos adicionales al agente de servicio de Cloud Healthcare cuenta de servicio. Para obtener más información, consulta Permisos de BigQuery para el almacén de datos de FHIR.

Configura la transmisión de BigQuery en un almacén de FHIR

Para habilitar la transmisión de BigQuery, configura StreamConfigs de tu almacén de FHIR. En StreamConfigs, puedes configurar el resourceTypes[] array para controlar qué tipos de recursos FHIR transmite BigQuery se aplica. Si no especificas resourceTypes[], BigQuery y la transmisión continua se aplica a todos los tipos de recursos de FHIR.

Para obtener explicaciones sobre otros parámetros de configuración disponibles en StreamConfigs, como BigQueryDestination: consulta Exporta recursos de FHIR.

En los siguientes ejemplos, se muestra cómo habilitar la transmisión de BigQuery en de un almacén de FHIR existente.

Console

Para configurar la transmisión de BigQuery en un almacén de FHIR existente con el En la consola de Google Cloud, completa los siguientes pasos:

  1. En la consola de Google Cloud, ve a la página Conjuntos de datos.

    Ir a Conjuntos de datos

  2. Selecciona el conjunto de datos que contenga el almacén de FHIR que deseas editar.

  3. En la lista Almacenes de datos, haz clic en el almacén de FHIR que quieres editar.

  4. En la sección Transmisión de BigQuery, completa lo siguiente: pasos:

    1. Haz clic en Agregar nueva configuración de transmisión.
    2. En la sección Configuración de transmisión nueva, haz clic en Explorar para Selecciona el conjunto de datos de BigQuery en el que quieres que se transmitan los recursos de FHIR modificados.
    3. En el menú desplegable Tipo de esquema, selecciona el esquema de salida para el en la tabla de BigQuery. Están disponibles los siguientes esquemas:
      • Analytics. Un esquema basado en el documento SQL en FHIR. Dado que BigQuery solo admite 10,000 columnas por tabla, no se generan esquemas para los campos Parameters.parameter.resource, Bundle.entry.resource y Bundle.entry.response.outcome.
      • Analytics V2. Un esquema similar al de Analytics, con compatibilidad adicional para lo siguiente: El esquema de Analytics V2 usa más espacio en la tabla de destino que el esquema de Analytics.
    4. Selecciona un nivel de profundidad en Profundidad de estructura recurrente. control deslizante para establecer la profundidad de todas las estructuras recursivas en el esquema de salida. De forma predeterminada, el valor recurrente es 2.
    5. En la lista Seleccionar tipos de recursos de FHIR, selecciona los tipos de recursos. para transmitir.
  5. Haz clic en Listo para guardar la configuración de transmisión.

gcloud

Gcloud CLI no admite esta acción. En su lugar, usa la consola de Google Cloud, curl, PowerShell o tu lenguaje preferido.

REST

Para configurar la transmisión de BigQuery en un almacén de FHIR existente, usa el projects.locations.datasets.fhirStores.patch .

En los siguientes ejemplos, no se especifica el array resourceTypes[]. para que la transmisión de BigQuery esté habilitada para todos los tipos de recursos de FHIR.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_IDEl ID de tu proyecto de Google Cloud.
  • LOCATION: La ubicación del conjunto de datos
  • DATASET_ID es el conjunto de datos superior del almacén de FHIR
  • FHIR_STORE_ID es el ID del almacén de FHIR
  • BIGQUERY_DATASET_ID: Es el nombre de un conjunto de datos existente de BigQuery en el que transmites cambios de recursos de FHIR.
  • SCHEMA_TYPE: Un valor para la enumeración SchemaType. Usa uno de los siguientes valores:
    • ANALYTICS. Un esquema basado en el documento SQL en FHIR. Dado que BigQuery solo admite 10,000 columnas por tabla, no se generan esquemas para los campos Parameters.parameter.resource, Bundle.entry.resource y Bundle.entry.response.outcome.
    • ANALYTICS_V2. Un esquema similar a ANALYTICS con compatibilidad adicional para lo siguiente:

      ANALYTICS_V2 usa más espacio en la tabla de destino que ANALYTICS

      .
  • WRITE_DISPOSITION: Un valor para la enumeración WriteDisposition. Usa uno de los siguientes valores:
    • WRITE_EMPTY. Solo exporta datos si las tablas de BigQuery de destino están vacías.
    • WRITE_TRUNCATE. Borrar todos los datos existentes en las tablas de BigQuery antes de escribir los recursos de FHIR.
    • WRITE_APPEND. Agregar datos a las tablas de BigQuery de destino

Cuerpo JSON de la solicitud:

{
  "streamConfigs": [
    {
      "bigqueryDestination": {
        "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID",
        "schemaConfig": {
          "schemaType": "SCHEMA_TYPE",
        },
        "writeDisposition": "WRITE_DISPOSITION"
      }
    }
  ]
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el comando siguiente en la terminal para crear o reemplazar este archivo en el directorio actual:

cat > request.json << 'EOF'
{
  "streamConfigs": [
    {
      "bigqueryDestination": {
        "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID",
        "schemaConfig": {
          "schemaType": "SCHEMA_TYPE",
        },
        "writeDisposition": "WRITE_DISPOSITION"
      }
    }
  ]
}
EOF

Luego, ejecuta el siguiente comando para enviar tu solicitud de REST:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?updateMask=streamConfigs"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el comando siguiente en la terminal para crear o reemplazar este archivo en el directorio actual:

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

Luego, ejecuta el siguiente comando para enviar tu solicitud de REST:

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

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?updateMask=streamConfigs" | Select-Object -Expand Content

Explorador de API

Copia el cuerpo de la solicitud y abre la página de referencia del método. El panel del Explorador de API se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Pega el cuerpo de la solicitud en esta herramienta, completa cualquier otro campo obligatorio y haz clic en Ejecutar.

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Si configuraste algún campo en el recurso FhirStore, también aparecerá en la respuesta.

De forma predeterminada, cuando transmites cambios de los recursos de FHIR a BigQuery, se crea una vista para cada recurso que se transmite. El tiene las siguientes propiedades:

  • Tiene el mismo nombre que el recurso y la tabla del recurso en la conjunto de datos de BigQuery. Por ejemplo, cuando transmites un mensaje de recurso, se crea una tabla llamada Patient con una vista llamada Patientview.
  • Solo contiene la versión actual del recurso, en lugar de todos los datos versions.

Transmite recursos de FHIR a tablas particionadas

Para exportar recursos de FHIR a tablas particionadas de BigQuery, establece la TimePartitioning enum en la lastUpdatedPartitionConfig de tu almacén de FHIR.

Las tablas particionadas funcionan como BigQuery tablas particionadas por unidad de tiempo. Las tablas particionadas tienen una columna agregada llamada lastUpdated, que es un duplicado de la columna meta.lastUpdated, que se genera a partir del campo meta.lastUpdated en un recurso de FHIR. BigQuery usa el lastUpdated para particionar tablas por hora, día, mes o año.

Consulta Selecciona la partición diaria, por hora, mensual o anual para obtener recomendaciones sobre cómo seleccionar el nivel de detalle de la partición.

No puedes convertir tablas de BigQuery existentes no particionadas en en tablas particionadas. Si exportas el recurso Patient cambios en una tabla Patients no particionada crear un nuevo almacén de FHIR con partición de tabla que exporte al mismo Conjunto de datos de BigQuery, la API de Cloud Healthcare aún exporta datos a la tabla no particionada Patients. Para empezar a usar una tabla particionada, borra la tabla Patients existente o usa un conjunto de datos de BigQuery diferente.

Si agregas la partición a una configuración de almacén de FHIR existente, aún puedes exportarlos a tablas no particionadas existentes. Sin embargo, la partición solo tendrá efecto en tablas nuevas.

En los siguientes ejemplos, se muestra cómo habilitar la transmisión de BigQuery para tablas particionadas en un almacén de FHIR existente.

Console

La consola de Google Cloud y la CLI de gcloud no admiten esta acción. En su lugar, usa curl, PowerShell o tu lenguaje preferido.

gcloud

La consola de Google Cloud y la CLI de gcloud no admiten esta acción. En su lugar, usa curl, PowerShell o tu lenguaje preferido.

REST

Para configurar la transmisión de BigQuery a tablas particionadas en un un almacén de FHIR existente, usa projects.locations.datasets.fhirStores.patch .

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_IDEl ID de tu proyecto de Google Cloud.
  • LOCATION: La ubicación del conjunto de datos
  • DATASET_ID es el conjunto de datos superior del almacén de FHIR
  • FHIR_STORE_ID es el ID del almacén de FHIR
  • BIGQUERY_DATASET_ID: Es el nombre de un conjunto de datos existente de BigQuery en el que transmites cambios de recursos de FHIR.
  • SCHEMA_TYPE: Un valor para la enumeración SchemaType. Usa uno de los siguientes valores:
    • ANALYTICS. Un esquema basado en el documento SQL en FHIR. Dado que BigQuery solo admite 10,000 columnas por tabla, no se generan esquemas para los campos Parameters.parameter.resource, Bundle.entry.resource y Bundle.entry.response.outcome.
    • ANALYTICS_V2. Un esquema similar a ANALYTICS con compatibilidad adicional para lo siguiente:

      ANALYTICS_V2 usa más espacio en la tabla de destino que ANALYTICS

      .
  • TIME_PARTITION_TYPE: Es el nivel de detalle con el que se particionan los recursos de FHIR exportados. Usa uno de los siguientes valores:
    • HOUR: Datos de partición por hora
    • DAY: Datos de partición por día
    • MONTH: Datos de partición por mes
    • YEAR: Datos de partición por año
  • WRITE_DISPOSITION: Un valor para la enumeración WriteDisposition. Usa uno de los siguientes valores:
    • WRITE_EMPTY. Solo exporta datos si las tablas de BigQuery de destino están vacías.
    • WRITE_TRUNCATE. Borrar todos los datos existentes en las tablas de BigQuery antes de escribir los recursos de FHIR.
    • WRITE_APPEND. Agregar datos a las tablas de BigQuery de destino

Cuerpo JSON de la solicitud:

{
  "streamConfigs": [
    {
      "bigqueryDestination": {
        "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID",
        "schemaConfig": {
          "schemaType": "SCHEMA_TYPE",
          "lastUpdatedPartitionConfig": {
            "type": "TIME_PARTITION_TYPE"
          }
        },
        "writeDisposition": "WRITE_DISPOSITION"
      }
    }
  ]
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el comando siguiente en la terminal para crear o reemplazar este archivo en el directorio actual:

cat > request.json << 'EOF'
{
  "streamConfigs": [
    {
      "bigqueryDestination": {
        "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID",
        "schemaConfig": {
          "schemaType": "SCHEMA_TYPE",
          "lastUpdatedPartitionConfig": {
            "type": "TIME_PARTITION_TYPE"
          }
        },
        "writeDisposition": "WRITE_DISPOSITION"
      }
    }
  ]
}
EOF

Luego, ejecuta el siguiente comando para enviar tu solicitud de REST:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?updateMask=streamConfigs"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el comando siguiente en la terminal para crear o reemplazar este archivo en el directorio actual:

@'
{
  "streamConfigs": [
    {
      "bigqueryDestination": {
        "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID",
        "schemaConfig": {
          "schemaType": "SCHEMA_TYPE",
          "lastUpdatedPartitionConfig": {
            "type": "TIME_PARTITION_TYPE"
          }
        },
        "writeDisposition": "WRITE_DISPOSITION"
      }
    }
  ]
}
'@  | Out-File -FilePath request.json -Encoding utf8

Luego, ejecuta el siguiente comando para enviar tu solicitud de REST:

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

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?updateMask=streamConfigs" | Select-Object -Expand Content

Explorador de API

Copia el cuerpo de la solicitud y abre la página de referencia del método. El panel del Explorador de API se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Pega el cuerpo de la solicitud en esta herramienta, completa cualquier otro campo obligatorio y haz clic en Ejecutar.

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Consulta una tabla particionada

Para reducir los costos de consulta cuando consultas tablas particionadas, usa la WHERE para filtrar por unidades de tiempo.

Por ejemplo, supongamos que configuraste el PartitionType enum a DAY. Consulta una tabla Patients sobre los recursos de un paciente que cambiaron en función de un error específico fecha, ejecuta la siguiente consulta:

SELECT * FROM `PROJECT_ID.BIGQUERY_DATASET.Patients`
  WHERE DATE(lastUpdated) = 'YYYY-MM-DD'

Migra de Analytics a Analytics V2

No puedes migrar un conjunto de datos de BigQuery existente desde Analytics al esquema de Analytics V2 con cualquier método, incluidos los siguientes:

  • Cambia el tipo de esquema de la tabla. en BigQuery.
  • Cambiar el tipo de esquema en una configuración de transmisión de FHIR existente

Esto se debe a que las columnas de la tabla de BigQuery Extensiones de FHIR en el esquema Analytics tienen su modo establecido en NULLABLE, mientras que los que están en el esquema Analytics V2 los establece en REPEATED. BigQuery no permite cambiar el modo de una columna de NULLABLE a REPEATED. Por lo tanto, los dos tipos de esquema son incompatibles.

Para migrar el tipo de esquema de los recursos de FHIR exportados de Analytics a Analytics V2, debes exportar los recursos de FHIR a un BigQuery nuevo con una configuración de transmisión nueva y el tipo de esquema actualizado. Tareas pendientes por lo que debes seguir estos pasos:

  1. Crea un conjunto de datos nuevo de BigQuery.

  2. Establece permisos para el conjunto de datos de BigQuery.

  3. Agrega una configuración de transmisión nueva al almacén de FHIR con el tipo de esquema configurado como Analytics V2.

  4. Reabastece los datos existentes mediante la exportación de los datos de FHIR existentes con la siguiente configuración. Consulta Exporta recursos de FHIR para obtener instrucciones sobre cómo establecer estos parámetros de configuración con la consola de Google Cloud, Google Cloud CLI o la API de REST. La siguiente configuración se aplica a la API de REST:

Las vistas en BigQuery que corresponden a algunos o todos los recursos de FHIR puede faltar en el conjunto de datos original de BigQuery de tu conjunto de datos. Para solucionar este problema, consulta Creación de vistas de recursos de FHIR faltantes.

Soluciona problemas de transmisión de FHIR

Si se producen errores cuando se envían cambios de recursos a BigQuery, los errores se registran en Cloud Logging. Para obtener más información, consulta Visualiza los registros de errores en Cloud Logging.

No se puede convertir la columna de NULLABLE a REPEATED

Este error se debe a una extensión repetida. Para solucionar este error, usa ANALYTICS_V2 tipo de esquema. Si ya usas ANALYTICS_V2, es posible que tengas un un conflicto entre dos extensiones o un conflicto entre una extensión y otra .

Los nombres de las columnas se generan a partir del texto que aparece después del último carácter / de URLs de extensión. Si la URL de una extensión termina con un valor como /resource_field name, puede producirse un conflicto.

Para evitar que vuelva a ocurrir este error, no uses extensiones si su campo son los mismos que los campos de recursos que estás propagando.

Creación de la vista de recursos de FHIR faltante

Si exportas un archivo FHIR de forma masiva recurso a BigQuery antes de transmitir ese recurso de FHIR, BigQuery no crea vistas para el recurso de FHIR.

Por ejemplo, es posible que no veas ninguna vista de los recursos de encuentro en la siguiente situación:

  1. Configura la transmisión de BigQuery en un almacén de FHIR y, luego, usa la API de REST para crear un recurso de paciente.

    BigQuery crea una tabla y una vista para el recurso de paciente.

  2. Exportas de forma masiva recursos de Encounter al mismo conjunto de datos de BigQuery que en el paso anterior.

    BigQuery crea una tabla para los recursos de encuentro.

  3. Usa la API de REST para crear un recurso de encuentro.

    Después de este paso, no se crean las vistas de BigQuery para el recurso de encuentro.

Para resolver este problema, usa la siguiente consulta para Crea una vista:

SELECT
    * EXCEPT (_resource_row_id)
FROM (
  SELECT
    ROW_NUMBER() OVER(PARTITION BY id ORDER BY meta.lastUpdated DESC) as _resource_row_id,
    *
    FROM `PROJECT_ID.BIGQUERY_DATASET_ID.RESOURCE_TABLE` AS p
) AS p
WHERE
  p._resource_row_id=1
  AND
  NOT EXISTS (
  SELECT
    *
  FROM
    UNNEST(p.meta.tag)
  WHERE
    code = 'DELETE');

Reemplaza lo siguiente:

  • PROJECT_IDEl ID de tu proyecto de Google Cloud.
  • BIGQUERY_DATASET_ID: Es el ID del conjunto de datos de BigQuery al que exportaste de forma masiva el recurso de FHIR.
  • RESOURCE_TABLE: Es el nombre de la tabla que corresponde al recurso de FHIR para el que deseas crear vistas.

Después de crear la vista, puedes continuar transmitiendo los cambios al FHIR recurso, y la vista se actualiza según corresponda.

¿Qué sigue?

Si deseas ver un instructivo sobre un caso de uso para transmitir cambios de recursos de FHIR, consulta Transmite y sincroniza recursos de FHIR con BigQuery.