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 konvertiert, in der er mit Amazon Athena abgefragt werden kann. Die Tabellen können einzeln oder als Gruppe mithilfe von SQL-basierten Abfragen abgefragt werden. 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 unter Abfrage-Arrays mit komplexen Typen und verschachtelten Strukturen im Amazon Athena Athena-Benutzerhandbuch.

Anmerkung

Alle Beispiele in diesem Thema verwenden fiktionalisierte Daten, die mit Synthea erstellt wurden. Weitere Informationen zum Erstellen eines mit Synthea-Daten vorinstallierten Datenspeichers 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 Obergrenzen, 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, das auf die Werte für given und zugreifen würdefamily.

    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 auf und Durchsuchen von JSON finden Sie unter JSON abfragen 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 signifikante Unterschiede. Weitere Informationen finden Sie unter DML-Abfragen, Funktionen und Operatoren im Amazon Athena Athena-Benutzerhandbuch.

Darüber hinaus unterstützt Athena mehrere Datentypen, auf die Sie bei der Erstellung von Abfragen Ihres HealthLake Datenspeichers stoßen können. Weitere Informationen zu Datentypen in Athena finden Sie unter Datentypen in Amazon Athena im Amazon Athena Athena-Benutzerhandbuch.

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

Jede Registerkarte zeigt Beispiele für die Suche nach den angegebenen Ressourcentypen und zugehörigen Elementen mit Athena.

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 es sich bei der Struktur um element eine Variable handelt, kann sie im Schema nicht vollständig spezifiziert werden. Um diese Variabilität zu handhaben, werden die Elemente innerhalb des Arrays als Zeichenketten übergeben.

In der Tabellenbeschreibung von finden Sie das ElementPatient, das als extension beschrieben wirdarray<string>, was bedeutet, dass Sie mithilfe eines Indexwerts auf die Elemente des Arrays zugreifen können. Um auf die Elemente der Zeichenfolge zuzugreifen, müssen Sie jedoch 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 gültiges JSON ist, behandelt Athena es als 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 Athena-Benutzerhandbuch.

Element: birthDate (Age)

Alter ist kein Element des Ressourcentyps Patient in FHIR. Hier sind zwei Beispiele für Suchanfragen, die nach Alter filtern.

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 Alterswerts

In dieser Beispiel-SQL-Abfrage verwenden wir ein integriertes SQL-Tool, current_date year um diese Komponenten zu extrahieren. 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 früher geboren wurden 2019-01-01 und es sindmale.

Die SQL-Abfrage zeigt Ihnen, wie Sie die CAST Funktion verwenden, um das birthDate Element als 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 eingebenDATE. 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-Zustand speichert Diagnosedaten zu Problemen, die ein gewisses Maß an Besorgnis ausgelöst haben. HealthLakeDie integrierte medizinische Verarbeitung natürlicher Sprache (NLP) generiert neue Condition Ressourcen auf der Grundlage der im DocumentReference Ressourcentyp enthaltenen Angaben. Wenn neue Ressourcen generiert werden, wird das Tag HealthLake an das Element SYSTEM_GENERATED angehängt. meta Diese SQL-Beispielabfrage 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 Anfrage weiter zu filtern. Das modifierextension Element enthält Details darüber, welche DocumentReference Ressource zum Generieren einer Reihe von Bedingungen verwendet wurde. Auch hier müssen Sie verwenden, json_extract um auf die verschachtelten JSON-Elemente zuzugreifen, die als Zeichenfolge in Athena importiert werden.

Diese SQL-Beispielabfrage zeigt, wie Sie nach all dem suchen könnenCondition, was auf der Grundlage einer bestimmten Abfrage generiert wurde. DocumentReference Verwenden Sie diese OptionCAST, um das JSON-Element als Zeichenfolge festzulegen, sodass Sie LIKE es 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 Messwerte 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 von Details, die in einer DocumentReference Ressource gefunden wurden. Diese SQL-Beispielabfrage enthält WHERE meta.tag[1] is NULL auskommentiert, 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 Informationen über Medikamente speichern können, die ein Patient eingenommen hat, einnimmt oder in future einnehmen wird. HealthLakeDie integrierte medizinische Verarbeitung natürlicher Sprache (NLP) generiert neue MedicationStatement Ressourcen auf der Grundlage von Dokumenten, die im DocumentReference Ressourcentyp gefunden wurden. Wenn neue Ressourcen generiert werden, wird das Tag HealthLake an das Element SYSTEM_GENERATED angehängt. meta Diese SQL-Beispielabfrage zeigt, wie eine Abfrage erstellt wird, die anhand eines einzelnen Patienten anhand seiner Kennung 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