Consulta de HealthLake datos con SQL - AWS HealthLake

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Consulta de HealthLake datos con SQL

Al importar los datos del FHIR al almacén de HealthLake datos, los datos FHIR de JSON anidados se someten simultáneamente a un proceso de ETL y se almacenan en formato de tabla abierta Apache Iceberg en Amazon S3. Cada tipo de recurso FHIR del almacén de HealthLake datos se convierte en una tabla, donde se puede consultar mediante Amazon Athena. Las tablas se pueden consultar individualmente o en grupo mediante consultas basadas en SQL. Debido a la estructura de los almacenes de datos, los datos se importan a Athena como varios tipos de datos diferentes. Para obtener más información sobre la creación de consultas SQL que puedan acceder a estos tipos de datos, consulte Matrices de consultas con tipos complejos y estructuras anidadas en la Guía del usuario de Amazon Athena.

nota

Todos los ejemplos de este tema utilizan datos ficticios creados con Synthea. Para obtener más información sobre cómo crear un banco de datos precargado con datos de Synthea, consulte. Creación de un almacén HealthLake de datos

Para cada elemento de un tipo de recurso, la especificación FHIR define una cardinalidad. La cardinalidad de un elemento define los límites inferior y superior del número de veces que puede aparecer este elemento. Al crear una consulta SQL, debe tener esto en cuenta. Por ejemplo, veamos algunos elementos de Tipo de recurso: paciente.

  • Elemento: nombre La especificación del FHIR establece la cardinalidad como. 0..*

    El elemento se captura como una matriz.

    [{ id = null, extension = null, use = official, _use = null, text = null, _text = null, family = Wolf938, _family = null, given = [Noel608], _given = null, prefix = null, _prefix = null, suffix = null, _suffix = null, period = null }]

    En Athena, para ver cómo se ha ingerido un tipo de recurso, búsquelo en Tablas y vistas. Para acceder a los elementos de esta matriz, puede utilizar la notación de puntos. A continuación, se muestra un ejemplo sencillo que permite acceder a los valores de given yfamily.

    SELECT name[1].given as FirstName, name[1].family as LastName FROM Patient
  • Elemento: MaritalStatus La especificación del FHIR establece la cardinalidad como. 0..1

    Este elemento se captura como JSON.

    { id = null, extension = null, coding = [ { id = null, extension = null, system = http: //terminology.hl7.org/CodeSystem/v3-MaritalStatus, _system = null, version = null, _version = null, code = S, _code = null, display = Never Married, _display = null, userSelected = null, _userSelected = null } ], text = Never Married, _text = null }

    En Athena, para ver cómo se ha ingerido un tipo de recurso, búsquelo en Tablas y vistas. Para acceder a los pares clave-valor en el JSON, puede utilizar la notación de puntos. Como no es una matriz, no se requiere ningún índice de matriz. A continuación, se muestra un ejemplo sencillo con el que se accedería al valor detext.

    SELECT maritalstatus.text as MaritalStatus FROM Patient

Para obtener más información sobre cómo acceder y buscar en JSON, consulte Consultas de JSON en la Guía del usuario de Athena.

Las declaraciones de consulta del Lenguaje de Manipulación de Datos (DML) de Athena se basan en Trino. Athena no es compatible con todas las funciones de Trino y existen diferencias significativas. Para obtener más información, consulte las consultas, las funciones y los operadores de DML en la Guía del usuario de Amazon Athena.

Además, Athena admite varios tipos de datos que puede encontrar al crear consultas en su banco de HealthLake datos. Para obtener más información sobre los tipos de datos en Athena, consulte Tipos de datos en Amazon Athena en la Guía del usuario de Amazon Athena.

Para obtener más información sobre cómo funcionan las consultas SQL en Athena, consulte la referencia de SQL para Amazon Athena en la Guía del usuario de Amazon Athena.

Cada pestaña muestra ejemplos de cómo buscar en los tipos de recursos especificados y los elementos asociados con Athena.

Element: Extension

El elemento extension se utiliza para crear campos personalizados en un banco de datos.

En este ejemplo, se muestra cómo acceder a las funciones del extension elemento que se encuentra en el tipo de Patient recurso.

Cuando el banco de HealthLake datos se importa a Athena, los elementos de un tipo de recurso se analizan de forma diferente. Como la estructura de element es variable, no se puede especificar completamente en el esquema. Para gestionar esa variabilidad, los elementos de la matriz se pasan como cadenas.

En la descripción de la tablaPatient, puede ver el elemento extension descrito comoarray<string>, lo que significa que puede acceder a los elementos de la matriz mediante un valor de índice. Sin embargo, para acceder a los elementos de la cadena, debe utilizarjson_extract.

Esta es una única entrada del extension elemento que se encuentra en la tabla de pacientes.

[{ "valueString": "Kerry175 Cummerata161", "url": "http://hl7.org/fhir/StructureDefinition/patient-mothersMaidenName" }, { "valueAddress": { "country": "DE", "city": "Hamburg", "state": "Hamburg" }, "url": "http://hl7.org/fhir/StructureDefinition/patient-birthPlace" }, { "valueDecimal": 0.0, "url": "http://synthetichealth.github.io/synthea/disability-adjusted-life-years" }, { "valueDecimal": 5.0, "url": "http://synthetichealth.github.io/synthea/quality-adjusted-life-years" } ]

Aunque se trata de un JSON válido, Athena lo trata como una cadena.

En este ejemplo de consulta SQL se muestra cómo se puede crear una tabla que contenga los patient-birthPlace elementos patient-mothersMaidenName y. Para acceder a estos elementos, debe utilizar diferentes índices de matriz y json_extract.

SELECT extension[1], json_extract(extension[1], '$.valueString') AS MothersMaidenName, extension[2], json_extract(extension[2], '$.valueAddress.city') AS birthPlace FROM patient

Para obtener más información sobre las consultas que implican JSON, consulte Extracción de datos de JSON en la Guía del usuario de Amazon Athena.

Element: birthDate (Age)

La edad no es un elemento del tipo de recurso para pacientes en el FHIR. Estos son dos ejemplos de búsquedas que se filtran según la edad.

Como la edad no es un elemento, utilizamos la birthDate para las consultas SQL. Para ver cómo se ha incorporado un elemento al FHIR, busque el nombre de la tabla en Tablas y vistas. Puede ver que es de tipo cadena.

Ejemplo 1: Calcular un valor para la edad

En este ejemplo de consulta SQL, utilizamos una herramienta SQL integrada year para extraer esos componentes. current_date Luego, los restamos para obtener la edad real del paciente, como se llama age una columna.

SELECT (year(current_date) - year(date(birthdate))) as age FROM patient

Ejemplo 2: Filtrar los pacientes que nacieron antes 2019-01-01 y que lo sonmale.

La consulta SQL muestra cómo utilizar la CAST función para convertir el birthDate elemento en un tipo DATE y cómo filtrar en función de dos criterios de la WHERE cláusula. Como el elemento se ingiere como cadena de texto de forma predeterminada, debemos CAST incorporarlo como tipoDATE. Luego puede usar el < operador para compararlo con una fecha diferente,2019-01-01. Al usarAND, puede agregar un segundo criterio a la WHERE cláusula.

SELECT birthdate FROM patient -- we convert birthdate (varchar) to date > cast that as date too WHERE CAST(birthdate AS DATE) < CAST('2019-01-01' AS DATE) AND gender = 'male'
Resource type: Location

En este ejemplo, se muestran las búsquedas de ubicaciones dentro del tipo de recurso Ubicación donde el nombre de la ciudad es Attleboro.

SELECT * FROM Location WHERE address.city='ATTLEBORO' LIMIT 10;
Element: Age
SELECT birthdate FROM patient -- we convert birthdate (varchar) to date > cast that as date too WHERE CAST(birthdate AS DATE) < CAST('2019-01-01' AS DATE) AND gender = 'male'
Resource type: Condition

La condición del tipo de recurso almacena datos de diagnóstico relacionados con problemas que han llegado a ser preocupantes. HealthLakeEl procesamiento médico del lenguaje natural (PNL) integrado genera nuevos Condition recursos en función de los detalles que se encuentran en el tipo de DocumentReference recurso. Cuando se genera un nuevo recurso, HealthLake añade la etiqueta SYSTEM_GENERATED al meta elemento. En este ejemplo de consulta SQL se muestra cómo se puede buscar en la tabla de condiciones y devolver los SYSTEM_GENERATED resultados cuando se han eliminado.

Para obtener más información sobre HealthLake el procesamiento del lenguaje natural (NLP) integrado, consulteProcesamiento de lenguaje natural (PNL) integrado para HealthLake.

SELECT * FROM condition WHERE meta.tag[1] is NULL

También puede buscar dentro de un elemento de cadena específico para filtrar aún más la consulta. El modifierextension elemento contiene detalles sobre qué DocumentReference recurso se utilizó para generar un conjunto de condiciones. De nuevo, debe utilizarlos json_extract para acceder a los elementos JSON anidados que se traen a Athena como una cadena.

En este ejemplo de consulta SQL se muestra cómo buscar todo lo Condition que se ha generado a partir de una consulta específica. DocumentReference Se utiliza CAST para establecer el elemento JSON como una cadena que se puede utilizar LIKE para comparar.

SELECT meta.tag[1].display as SystemGenerated, json_extract(modifierextension[4], '$.valueReference.reference') as DocumentReference FROM condition WHERE meta.tag[1].display = 'SYSTEM_GENERATED' AND CAST(json_extract(modifierextension[4], '$.valueReference.reference') as VARCHAR) LIKE '%DocumentReference/67aa0278-8111-40d0-8adc-43055eb9d18d%'
Resource type: Observation

El tipo de recurso, Observation, almacena las mediciones y las afirmaciones simples realizadas sobre un paciente, un dispositivo u otro tema. HealthLakeEl procesamiento del lenguaje natural (PNL) integrado genera nuevos Observation recursos en función de los detalles que se encuentran en un DocumentReference recurso. Este ejemplo de consulta SQL incluye WHERE meta.tag[1] is NULL comentarios, lo que significa que se incluyen los SYSTEM_GENERATED resultados.

SELECT valueCodeableConcept.coding[1].code FROM Observation WHERE valueCodeableConcept.coding[1].code = '266919005' -- WHERE meta.tag[1] is NULL

Esta columna se importó como struct. Por lo tanto, puede acceder a los elementos que contiene mediante la notación de puntos.

Resource type: MedicationStatement

MedicationStatement es un tipo de recurso del FHIR que puede utilizar para almacenar detalles sobre los medicamentos que un paciente ha tomado, está tomando o tomará en el futuro. HealthLakeEl procesamiento médico del lenguaje natural (PNL) integrado genera nuevos MedicationStatement recursos basados en los documentos que se encuentran en el tipo de DocumentReference recurso. Cuando se generan nuevos recursos, HealthLake añade la etiqueta SYSTEM_GENERATED al meta elemento. Este ejemplo de consulta SQL muestra cómo crear una consulta que filtre en función de un solo paciente mediante su identificador y busque los recursos que se han agregado mediante HealthLake la PNL integrada.

SELECT * FROM medicationstatement WHERE meta.tag[1].display = 'SYSTEM_GENERATED' AND subject.reference = 'Patient/0679b7b7-937d-488a-b48d-6315b8e7003b';

Para obtener más información sobre HealthLake el procesamiento del lenguaje natural (NLP) integrado, consulte. Procesamiento de lenguaje natural (PNL) integrado para HealthLake