Interrogazione HealthLake dei dati con SQL - AWS HealthLake

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Interrogazione HealthLake dei dati con SQL

Quando importi i dati FHIR nell'archivio dati, HealthLake i dati JSON FHIR annidati vengono contemporaneamente sottoposti a un processo ETL e vengono archiviati in formato tabella aperta Apache Iceberg in Amazon S3. Ogni tipo di risorsa FHIR del tuo HealthLake data store viene convertito in una tabella, dove può essere interrogato utilizzando Amazon Athena. Le tabelle possono essere interrogate singolarmente o in gruppo utilizzando query basate su SQL. A causa della struttura degli archivi dati, i dati vengono importati in Athena come diversi tipi di dati. Per ulteriori informazioni sulla creazione di query SQL in grado di accedere a questi tipi di dati, consulta Matrici di query con tipi complessi e strutture annidate nella Amazon Athena User Guide.

Nota

Tutti gli esempi in questo argomento utilizzano dati fittizi creati con Synthea. Per ulteriori informazioni sulla creazione di un data store precaricato con dati Synthea, consulta. Creazione di un archivio HealthLake dati

Per ogni elemento di un tipo di risorsa, la specifica FHIR definisce una cardinalità. La cardinalità di un elemento definisce i limiti inferiore e superiore di quante volte questo elemento può apparire. Quando si costruisce una query SQL, è necessario tenerne conto. Ad esempio, diamo un'occhiata ad alcuni elementi in Tipo di risorsa: Paziente.

  • Elemento: Nome La specifica FHIR imposta la cardinalità come. 0..*

    L'elemento viene acquisito come matrice.

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

    In Athena, per vedere come è stato importato un tipo di risorsa, cercalo in Tabelle e viste. Per accedere agli elementi di questo array, puoi usare la notazione a punti. Ecco un semplice esempio che consentirebbe di accedere ai valori di given efamily.

    SELECT name[1].given as FirstName, name[1].family as LastName FROM Patient
  • Elemento: MaritalStatus La specifica FHIR imposta la cardinalità come. 0..1

    Questo elemento viene acquisito come 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 }

    In Athena, per vedere come è stato importato un tipo di risorsa, cercalo in Tabelle e viste. Per accedere alle coppie chiave-valore in JSON, puoi usare la notazione a punti. Poiché non è un array, non è richiesto alcun indice di matrice. Ecco un semplice esempio che consentirebbe di accedere al valore ditext.

    SELECT maritalstatus.text as MaritalStatus FROM Patient

Per ulteriori informazioni sull'accesso e sulla ricerca in JSON, consulta Querying JSON nella Athena User Guide.

Le istruzioni di interrogazione DML (Athena Data Manipulation Language) sono basate su Trino. Athena non supporta tutte le funzionalità di Trino e presenta differenze significative. Per ulteriori informazioni, consulta le interrogazioni, le funzioni e gli operatori DML nella Guida per l'utente di Amazon Athena.

Inoltre, Athena supporta diversi tipi di dati che potresti incontrare durante la creazione di query sul tuo HealthLake archivio dati. Per ulteriori informazioni sui tipi di dati in Athena, consulta Tipi di dati in Amazon Athena nella Amazon Athena User Guide.

Per ulteriori informazioni su come funzionano le query SQL in Athena, consulta il riferimento SQL per Amazon Athena nella Amazon Athena User Guide.

Ogni scheda mostra esempi di come effettuare ricerche sui tipi di risorse specificati e sugli elementi associati utilizzando Athena.

Element: Extension

L'elemento extension viene utilizzato per creare campi personalizzati in un archivio dati.

Questo esempio mostra come accedere alle funzionalità dell'extensionelemento presente nel tipo di Patient risorsa.

Quando l'archivio HealthLake dati viene importato in Athena, gli elementi di un tipo di risorsa vengono analizzati in modo diverso. Poiché la struttura della variabile element is, non può essere specificata completamente nello schema. Per gestire tale variabilità, gli elementi all'interno dell'array vengono passati come stringhe.

Nella descrizione della tabella diPatient, è possibile vedere l'elemento extension descritto comearray<string>, il che significa che è possibile accedere agli elementi dell'array utilizzando un valore di indice. Per accedere agli elementi della stringa, tuttavia, è necessario utilizzarejson_extract.

Ecco una singola voce dell'extensionelemento che si trova nella tabella dei pazienti.

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

Anche se si tratta di un JSON valido, Athena lo considera come una stringa.

Questo esempio di query SQL dimostra come creare una tabella che contenga gli elementi and. patient-mothersMaidenName patient-birthPlace Per accedere a questi elementi, è necessario utilizzare diversi indici di matrice e json_extract.

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

Per ulteriori informazioni sulle query che coinvolgono JSON, consulta Estrazione di dati da JSON nella Amazon Athena User Guide.

Element: birthDate (Age)

L'età non è un elemento del tipo di risorsa per i pazienti in FHIR. Ecco due esempi di ricerche che filtrano in base all'età.

Poiché l'età non è un elemento, utilizziamo il birthDate per le query SQL. Per vedere come un elemento è stato inserito in FHIR, cercate il nome della tabella in Tabelle e viste. Puoi vedere che è di tipo stringa.

Esempio 1: calcolo di un valore per l'età

In questa query SQL di esempio, utilizziamo uno strumento SQL integrato year per estrarre tali componenti. current_date Quindi, li sottraiamo per restituire l'età effettiva del paziente, sotto forma di colonna denominataage.

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

Esempio 2: Filtraggio per pazienti nati prima 2019-01-01 e che lo sono. male

La query SQL mostra come utilizzare la CAST funzione per convertire l'birthDateelemento come tipo DATE e come filtrare in base a due criteri della WHERE clausola. Poiché l'elemento viene inserito come stringa di tipo per impostazione predefinita, è necessario che CAST sia di tipo. DATE Quindi puoi usare l'<operatore per confrontarlo con una data diversa,. 2019-01-01 UtilizzandoAND, è possibile aggiungere un secondo criterio alla WHERE clausola.

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

Questo esempio mostra le ricerche di località all'interno del tipo di risorsa Location in cui il nome della città è 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 condizione relativa al tipo di risorsa memorizza i dati di diagnosi relativi a problemi che hanno raggiunto un livello di preoccupazione. HealthLakel'elaborazione medica integrata del linguaggio naturale (NLP) genera nuove Condition risorse sulla base dei dettagli presenti nel DocumentReference tipo di risorsa. Quando viene generata una nuova risorsa, HealthLake aggiunge il tag SYSTEM_GENERATED all'elemento. meta Questa query SQL di esempio dimostra come è possibile cercare nella tabella delle condizioni e restituire risultati laddove i SYSTEM_GENERATED risultati sono stati rimossi.

Per ulteriori informazioni sull'elaborazione integrata HealthLake del linguaggio naturale (NLP), vedere. Elaborazione integrata del linguaggio naturale (NLP) per HealthLake

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

Puoi anche cercare all'interno di un elemento di stringa specificato per filtrare ulteriormente la tua query. L'modifierextensionelemento contiene dettagli su quale DocumentReference risorsa è stata utilizzata per generare un insieme di condizioni. Ancora una volta, è necessario utilizzare json_extract per accedere agli elementi JSON annidati che vengono importati in Athena come stringa.

Questa query SQL di esempio dimostra come è possibile cercare tutto ciò Condition che è stato generato in base a uno specifico. DocumentReference CASTDa utilizzare per impostare l'elemento JSON come stringa in modo da poterlo utilizzare LIKE per il confronto.

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

Il tipo di risorsa Observation memorizza le misurazioni e le semplici asserzioni fatte su un paziente, un dispositivo o un altro argomento. HealthLake(Natural Language Processing, NLP) integrata genera nuove Observation risorse sulla base dei dettagli presenti in una risorsa. DocumentReference Questa query SQL di esempio include WHERE meta.tag[1] is NULL commenti, il che significa che i SYSTEM_GENERATED risultati sono inclusi.

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

Questa colonna è stata importata come struct. Pertanto, è possibile accedere agli elementi al suo interno utilizzando la notazione a punti.

Resource type: MedicationStatement

MedicationStatement è un tipo di risorsa FHIR che è possibile utilizzare per memorizzare informazioni sui farmaci che un paziente ha assunto, sta assumendo o assumerà in futuro. HealthLakel'elaborazione medica integrata del linguaggio naturale (NLP) genera nuove MedicationStatement risorse sulla base dei documenti presenti nel DocumentReference tipo di risorsa. Quando vengono generate nuove risorse, HealthLake aggiunge il tag SYSTEM_GENERATED all'elemento. meta Questo esempio di query SQL dimostra come creare una query che filtra in base a un singolo paziente utilizzando il relativo identificatore e trova le risorse che sono state aggiunte dalla HealthLake PNL integrata.

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

Per ulteriori informazioni sull'elaborazione integrata HealthLake del linguaggio naturale (NLP), vedere. Elaborazione integrata del linguaggio naturale (NLP) per HealthLake