View a markdown version of this page

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 datos, HealthLake los datos anidados del FHIR de JSON se someten simultáneamente a un proceso de ETL y se almacenan en el formato de tabla abierta Apache Iceberg en Amazon S3. Cada tipo de recurso de FHIR de su almacén de HealthLake datos se convierte en una tabla, donde se puede consultar mediante Amazon Athena. Las tablas se pueden consultar de forma individual o en grupo mediante consultas. SQL-based Debido a la estructura de los almacenes de datos, sus 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 la creación de 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 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 usar la notación de puntos. Este es un ejemplo sencillo en el que se puede 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 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 usar la notación de puntos. Como no es una matriz, no se requiere ningún índice de matriz. Este es un ejemplo sencillo en el que se puede acceder al valor detext.

    SELECT maritalstatus.text as MaritalStatus FROM Patient

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

Las sentencias de consulta del lenguaje de manipulación de datos (DML) de Athena se basan en Trino. Athena no admite 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 HealthLake almacén de datos. Para obtener más información sobre los tipos de datos en Athena, consulte los 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 de 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 mediante Athena.

Element: Extension

El elemento extension se usa 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 su banco de HealthLake datos se importa a Athena, los elementos de un tipo de recurso se analizan de forma diferente. Como la estructura del element es variable, no se puede especificar por completo en el esquema. Para gestionar esa variabilidad, los elementos de la matriz se pasan como cadenas.

En la descripción de la tabla dePatient, 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 usarjson_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.

Este ejemplo de consulta SQL demuestra cómo puede crear una tabla que contenga los patient-birthPlace elementos patient-mothersMaidenName y. Para acceder a estos elementos, debe usar 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 involucran JSON, consulte Extraer 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 current_date y year extraemos esos componentes. Luego, los restamos para obtener la edad real del paciente en una columna denominadaage.

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

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

La consulta SQL muestra cómo usar la CAST función para convertir el birthDate elemento en tipo DATE y cómo filtrar en función de dos criterios de la WHERE cláusula. Como el elemento se introduce como cadena de tipo por defecto, debemos CAST incluirlo como tipoDATE. Luego puede usar el < operador para compararlo con una fecha diferente,2019-01-01. Al usarloAND, 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 de tipo de recurso almacena datos de diagnóstico relacionados con problemas que han pasado a ser preocupantes. HealthLakeEl procesamiento del lenguaje natural (PNL) médico integrado genera nuevos Condition recursos en función de los detalles que se encuentran en el tipo de DocumentReference recurso. Cuando se generan nuevos recursos, HealthLake añade la etiqueta SYSTEM_GENERATED al meta elemento. En este ejemplo de consulta SQL se muestra cómo se pueden buscar en la tabla de condiciones y obtener los SYSTEM_GENERATED resultados que se han eliminado.

Para obtener más información sobre HealthLake el procesamiento integrado del lenguaje natural (PNL), 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, debes usarlo json_extract para acceder a los elementos JSON anidados que se incorporan a Athena en forma de cadena.

Este ejemplo de consulta SQL demuestra cómo puede buscar todo lo Condition que se ha generado a partir de una consulta específica. DocumentReference Utilízala CAST para establecer el elemento JSON como una cadena que puedas usar 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 sujeto. 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 los SYSTEM_GENERATED resultados están incluidos.

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 usar para almacenar detalles sobre los medicamentos que un paciente ha tomado, está tomando o tomará en el futuro. HealthLakeEl procesamiento del lenguaje natural (PNL) médico integrado genera nuevos MedicationStatement recursos a partir de 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 único 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 integrado del lenguaje natural (PNL), consulte. Procesamiento de lenguaje natural (PNL) integrado para HealthLake