View a markdown version of this page

HealthLake Daten mit SQL abfragen - AWS HealthLake

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

HealthLake Daten mit SQL abfragen

Wenn Sie Ihre FHIR-Daten in den HealthLake Datenspeicher importieren, werden die verschachtelten JSON-FHIR-Daten gleichzeitig einem ETL-Prozess unterzogen und im offenen Tabellenformat von Apache Iceberg in Amazon S3 gespeichert. Jeder FHIR-Ressourcentyp aus Ihrem HealthLake Datenspeicher wird in eine Tabelle umgewandelt, in der er mit Amazon Athena abgefragt werden kann. Die Tabellen können einzeln oder als Gruppe mithilfe von Abfragen abgefragt werden. SQL-based Aufgrund der Struktur der Datenspeicher werden Ihre Daten als mehrere verschiedene Datentypen in Athena importiert. Weitere Informationen zum Erstellen von SQL-Abfragen, die auf diese Datentypen zugreifen können, finden Sie im Amazon Athena-Benutzerhandbuch unter Abfrage-Arrays mit komplexen Typen und verschachtelten Strukturen.

Anmerkung

Alle Beispiele in diesem Thema verwenden fiktionalisierte Daten, die mit Synthea erstellt wurden. Weitere Informationen zum Erstellen eines Datenspeichers, auf dem Synthea-Daten vorinstalliert sind, finden Sie unter. Einen HealthLake Datenspeicher erstellen

Für jedes Element in einem Ressourcentyp definiert die FHIR-Spezifikation eine Kardinalität. Die Kardinalität eines Elements definiert die Unter- und Obergrenze dafür, wie oft dieses Element vorkommen kann. Bei der Erstellung einer SQL-Abfrage müssen Sie dies berücksichtigen. Schauen wir uns zum Beispiel einige Elemente im Ressourcentyp: Patient an.

  • Element: Name Die FHIR-Spezifikation legt die Kardinalität als fest. 0..*

    Das Element wird als Array erfasst.

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

    Um in Athena zu sehen, wie ein Ressourcentyp aufgenommen wurde, suchen Sie unter Tabellen und Ansichten danach. Um auf Elemente in diesem Array zuzugreifen, können Sie die Punktnotation verwenden. Hier ist ein einfaches Beispiel für den Zugriff auf die Werte für given undfamily.

    SELECT name[1].given as FirstName, name[1].family as LastName FROM Patient
  • Element: MaritalStatus Die FHIR-Spezifikation legt die Kardinalität als fest. 0..1

    Dieses Element wird als JSON erfasst.

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

    Um in Athena zu sehen, wie ein Ressourcentyp aufgenommen wurde, suchen Sie unter Tabellen und Ansichten danach. Um auf Schlüssel-Wert-Paare im JSON zuzugreifen, können Sie die Punktnotation verwenden. Da es sich nicht um ein Array handelt, ist kein Array-Index erforderlich. Hier ist ein einfaches Beispiel, das auf den Wert für zugreifen würdetext.

    SELECT maritalstatus.text as MaritalStatus FROM Patient

Weitere Informationen zum Zugreifen und Durchsuchen von JSON finden Sie unter Abfragen von JSON im Athena-Benutzerhandbuch.

Die Abfrageanweisungen der Athena Data Manipulation Language (DML) basieren auf Trino. Athena unterstützt nicht alle Funktionen von Trino, und es gibt erhebliche Unterschiede. Weitere Informationen finden Sie unter DML-Abfragen, Funktionen und Operatoren im Amazon Athena-Benutzerhandbuch.

Darüber hinaus unterstützt Athena mehrere Datentypen, auf die Sie stoßen können, wenn Sie Abfragen für Ihren HealthLake Datenspeicher erstellen. Weitere Informationen zu Datentypen in Athena finden Sie unter Datentypen in Amazon Athena im Amazon Athena-Benutzerhandbuch.

Weitere Informationen zur Funktionsweise von SQL-Abfragen in Athena finden Sie unter SQL-Referenz für Amazon Athena im Amazon Athena-Benutzerhandbuch.

Jede Registerkarte enthält Beispiele dafür, wie mithilfe von Athena nach den angegebenen Ressourcentypen und zugehörigen Elementen gesucht wird.

Element: Extension

Das Element extension wird verwendet, um benutzerdefinierte Felder in einem Datenspeicher zu erstellen.

Dieses Beispiel zeigt Ihnen, wie Sie auf die Funktionen des extension Elements zugreifen, das im Patient Ressourcentyp gefunden wurde.

Wenn Ihr HealthLake Datenspeicher in Athena importiert wird, werden die Elemente eines Ressourcentyps unterschiedlich analysiert. Da die Struktur von variabel element ist, kann sie im Schema nicht vollständig spezifiziert werden. Um mit dieser Variabilität umzugehen, werden die Elemente innerhalb des Arrays als Zeichenketten übergeben.

In der Tabellenbeschreibung von wird das Element als extension beschriebenPatient, was bedeutetarray<string>, dass Sie auf die Elemente des Arrays zugreifen können, indem Sie einen Indexwert verwenden. Um auf die Elemente der Zeichenfolge zuzugreifen, müssen Sie jedoch Folgendes verwendenjson_extract.

Hier ist ein einzelner Eintrag aus dem extension Element in der Patiententabelle.

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

Obwohl dies ein gültiges JSON ist, behandelt Athena es als eine Zeichenfolge.

Dieses Beispiel für eine SQL-Abfrage zeigt, wie Sie eine Tabelle erstellen können, die die patient-birthPlace Elemente patient-mothersMaidenName und enthält. Um auf diese Elemente zuzugreifen, müssen Sie verschiedene Array-Indizes verwenden und json_extract.

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

Weitere Informationen zu Abfragen, die JSON beinhalten, finden Sie unter Extrahieren von Daten aus JSON im Amazon Athena-Benutzerhandbuch.

Element: birthDate (Age)

Das Alter ist kein Element des Ressourcentyps Patient in FHIR. Hier sind zwei Beispiele für Suchanfragen, bei denen nach Alter gefiltert wird.

Da das Alter kein Element ist, verwenden wir das birthDate für die SQL-Abfragen. Um zu sehen, wie ein Element in FHIR aufgenommen wurde, suchen Sie unter Tabellen und Ansichten nach dem Tabellennamen. Sie können sehen, dass es vom Typ Zeichenfolge ist.

Beispiel 1: Berechnung eines Werts für das Alter

In dieser Beispiel-SQL-Abfrage verwenden wir ein integriertes SQL-Tool current_date und year extrahieren diese Komponenten. Dann subtrahieren wir sie, um das tatsächliche Alter eines Patienten in einer Spalte mit dem Namen age zurückzugeben.

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

Beispiel 2: Filterung nach Patienten, die schon einmal geboren wurden 2019-01-01 und es sindmale.

Die SQL-Abfrage zeigt Ihnen, wie Sie die CAST Funktion verwenden, um das birthDate Element in einen Typ DATE umzuwandeln, und wie Sie anhand von zwei Kriterien in der WHERE Klausel filtern. Da das Element standardmäßig als Typstring aufgenommen wird, müssen wir CAST es als Typ DATE verwenden. Dann können Sie den < Operator verwenden, um es mit einem anderen Datum zu vergleichen,2019-01-01. Mithilfe AND von können Sie der WHERE Klausel ein zweites Kriterium hinzufügen.

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

Dieses Beispiel zeigt Suchen nach Orten innerhalb des Ressourcentyps Standort, bei denen der Stadtname Attleboro lautet.

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

Der Ressourcentyp „Bedingung“ speichert Diagnosedaten zu Problemen, die inzwischen besorgniserregend sind. HealthLakeDie integrierte medizinische Verarbeitung natürlicher Sprache (NLP) generiert neue Condition Ressourcen auf der Grundlage der im DocumentReference Ressourcentyp enthaltenen Informationen. Wenn neue Ressourcen generiert werden, HealthLake hängt das Tag an das Element SYSTEM_GENERATED an. meta Diese Beispiel-SQL-Abfrage zeigt, wie Sie die Bedingungstabelle durchsuchen und Ergebnisse zurückgeben können, bei denen die SYSTEM_GENERATED Ergebnisse entfernt wurden.

Weitere Informationen HealthLake zur integrierten Verarbeitung natürlicher Sprache (NLP) finden Sie unterIntegrierte Verarbeitung natürlicher Sprache (NLP) für HealthLake.

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

Sie können auch innerhalb eines bestimmten Zeichenkettenelements suchen, um Ihre Abfrage weiter zu filtern. Das modifierextension Element enthält Details darüber, welche DocumentReference Ressource verwendet wurde, um eine Reihe von Bedingungen zu generieren. Auch hier müssen Sie es verwenden, json_extract um auf die verschachtelten JSON-Elemente zuzugreifen, die als Zeichenfolge in Athena importiert werden.

Diese Beispiel-SQL-Abfrage zeigt, wie Sie nach all dem suchen könnenCondition, was auf der Grundlage einer bestimmten generiert wurde. DocumentReference Wird verwendetCAST, um das JSON-Element als Zeichenfolge festzulegen, sodass Sie es LIKE zum Vergleichen verwenden können.

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

Der Ressourcentyp Observation speichert Messungen und einfache Aussagen zu einem Patienten, einem Gerät oder einer anderen Person. HealthLakeDie integrierte Verarbeitung natürlicher Sprache (NLP) generiert neue Observation Ressourcen auf der Grundlage der in einer DocumentReference Ressource enthaltenen Details. Diese Beispiel-SQL-Abfrage WHERE meta.tag[1] is NULL beinhaltet Kommentare, was bedeutet, dass die SYSTEM_GENERATED Ergebnisse enthalten sind.

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

Diese Spalte wurde als importiert struct. Daher können Sie mithilfe der Punktnotation auf die darin enthaltenen Elemente zugreifen.

Resource type: MedicationStatement

MedicationStatement ist ein FHIR-Ressourcentyp, mit dem Sie Details zu Medikamenten speichern können, die ein Patient eingenommen hat, einnimmt oder in Zukunft einnehmen wird. HealthLakeDie integrierte medizinische Verarbeitung natürlicher Sprache (NLP) generiert neue MedicationStatement Ressourcen auf der Grundlage der Dokumente, die im DocumentReference Ressourcentyp gefunden wurden. Wenn neue Ressourcen generiert werden, HealthLake hängt das Tag an das Element SYSTEM_GENERATED an. meta Diese Beispiel-SQL-Abfrage zeigt, wie eine Abfrage erstellt wird, die anhand eines einzelnen Patienten anhand seines Identifikators filtert und Ressourcen findet, die durch HealthLake das integrierte NLP hinzugefügt wurden.

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

Weitere Informationen HealthLake zur integrierten Verarbeitung natürlicher Sprache (NLP) finden Sie unter. Integrierte Verarbeitung natürlicher Sprache (NLP) für HealthLake