View a markdown version of this page

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 nel data store, HealthLake i dati JSON FHIR annidati vengono contemporaneamente sottoposti a un processo ETL e vengono archiviati nel formato di 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 tramite query. SQL-based A causa della struttura degli archivi di 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 Array 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 saperne di più sulla creazione di un data store precaricato con dati Synthea, vedi. 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, esaminiamo 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 inserito 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 accederebbe ai valori per 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 inserito 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 accederebbe al valore ditext.

    SELECT maritalstatus.text as MaritalStatus FROM Patient

Per saperne di più sull'accesso e sulla ricerca di JSON, consulta Querying JSON nella Athena User Guide.

Le istruzioni di interrogazione DML (Data Manipulation Language) di Athena sono basate su Trino. Athena non supporta tutte le funzionalità di Trino e ci sono differenze significative. Per ulteriori informazioni, consulta le query, le funzioni e gli operatori DML nella Amazon Athena User Guide.

Inoltre, Athena supporta diversi tipi di dati che potresti incontrare durante la creazione di query sul tuo data store. HealthLake 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 SQL reference for 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 trovato nel tipo di Patient risorsa.

Quando il HealthLake data store 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, puoi vedere l'elemento extension descritto comearray<string>, il che significa che puoi accedere agli elementi dell'array utilizzando un valore di indice. Per accedere agli elementi della stringa, tuttavia, è necessario utilizzarejson_extract.

Ecco una singola voce tratta dall'extensionelemento trovato 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 Extracting data from JSON nella Amazon Athena User Guide.

Element: birthDate (Age)

L'età non è un elemento del tipo di risorsa Paziente 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, cerca 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 current_date e year per estrarre tali componenti. Quindi, li sottraiamo per restituire l'età effettiva del paziente in una colonna chiamataage.

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

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

La query SQL mostra come utilizzare la CAST funzione per trasformare 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 UsandoAND, puoi 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 del tipo di risorsa memorizza i dati di diagnosi relativi a problemi che sono diventati preoccupanti. HealthLakel'elaborazione medica del linguaggio naturale (NLP) integrata genera nuove Condition risorse in base ai dettagli 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 eseguire ricerche 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 sulla DocumentReference risorsa utilizzata per generare una serie di condizioni. Anche in questo caso, è necessario utilizzare json_extract per accedere agli elementi JSON annidati che vengono inseriti in Athena come stringa.

Questo esempio di query SQL dimostra come è possibile cercare tutto ciò Condition che è stato generato in base a uno specifico. DocumentReference CASTConsente di 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 soggetto. HealthLakel'elaborazione integrata del linguaggio naturale (NLP) genera nuove Observation risorse sulla base dei dettagli presenti in una risorsa. DocumentReference Questo esempio di query SQL include i 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 puoi utilizzare per memorizzare dettagli sui farmaci che un paziente ha assunto, sta assumendo o assumerà in futuro. HealthLakel'elaborazione medica del linguaggio naturale (NLP) integrata 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 un'interrogazione che filtri in base a un singolo paziente utilizzando il relativo identificatore e trovi 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 saperne di più sull'elaborazione integrata HealthLake del linguaggio naturale (NLP), vedi. Elaborazione integrata del linguaggio naturale (NLP) per HealthLake