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.
Beispiel für SQL-Abfragen mit komplexer Filterung
Die folgenden Beispiele zeigen, wie Amazon Athena SQL-Abfragen mit komplexer Filterung verwendet werden, um FHIR-Daten aus einem HealthLake Datenspeicher zu finden.
Beispiel Erstellen Sie Filterkriterien auf der Grundlage demografischer Daten
Bei der Erstellung einer Patientenkohorte ist es wichtig, die richtigen demografischen Daten der Patienten zu ermitteln. Diese Beispielabfrage zeigt, wie Sie die Trino-Punktnotation verwenden und json_extract Daten in Ihrem HealthLake Datenspeicher filtern können.
SELECT id , CONCAT(name[1].family, ' ', name[1].given[1]) as name , (year(current_date) - year(date(birthdate))) as age , gender as gender , json_extract(extension[1], '$.valueString') as MothersMaidenName , json_extract(extension[2], '$.valueAddress.city') as birthPlace , maritalstatus.coding[1].display as maritalstatus , address[1].line[1] as addressline , address[1].city as city , address[1].district as district , address[1].state as state , address[1].postalcode as postalcode , address[1].country as country , json_extract(address[1].extension[1], '$.extension[0].valueDecimal') as latitude , json_extract(address[1].extension[1], '$.extension[1].valueDecimal') as longitude , telecom[1].value as telNumber , deceasedboolean as deceasedIndicator , deceaseddatetime FROMdatabase.patient;
Mit der Athena-Konsole können Sie die Ergebnisse weiter sortieren und herunterladen.
Beispiel Erstellen Sie Filter für einen Patienten und die damit verbundenen Erkrankungen
Die folgende Beispielabfrage zeigt, wie Sie alle verwandten Erkrankungen für die in einem HealthLake Datenspeicher gefundenen Patienten suchen und sortieren können.
SELECT patient.id as patientId , condition.id as conditionId , CONCAT(name[1].family, ' ', name[1].given[1]) as name , condition.meta.tag[1].display , json_extract(condition.modifierextension[1], '$.valueDecimal') AS confidenceScore , category[1].coding[1].code as categoryCode , category[1].coding[1].display as categoryDescription , code.coding[1].code as diagnosisCode , code.coding[1].display as diagnosisDescription , onsetdatetime , severity.coding[1].code as severityCode , severity.coding[1].display as severityDescription , verificationstatus.coding[1].display as verificationStatus , clinicalstatus.coding[1].display as clinicalStatus , encounter.reference as encounterId , encounter.type as encountertype FROMdatabase.patient, condition WHERE CONCAT('Patient/', patient.id) = condition.subject.reference ORDER BY name;
Sie können die Athena-Konsole verwenden, um die Ergebnisse weiter zu sortieren oder sie zur weiteren Analyse herunterzuladen.
Beispiel Erstellen Sie Filter für Patienten und die damit verbundenen Beobachtungen
Die folgende Beispielabfrage zeigt, wie alle zugehörigen Beobachtungen für Patienten, die in einem HealthLake Datenspeicher gefunden wurden, gesucht und sortiert werden.
SELECT patient.id as patientId , observation.id as observationId , CONCAT(name[1].family, ' ', name[1].given[1]) as name , meta.tag[1].display , json_extract(modifierextension[1], '$.valueDecimal') AS confidenceScore , status , category[1].coding[1].code as categoryCode , category[1].coding[1].display as categoryDescription , code.coding[1].code as observationCode , code.coding[1].display as observationDescription , effectivedatetime , CASE WHEN valuequantity.value IS NOT NULL THEN CONCAT(CAST(valuequantity.value AS VARCHAR),' ',valuequantity.unit) WHEN valueCodeableConcept.coding [ 1 ].code IS NOT NULL THEN CAST(valueCodeableConcept.coding [ 1 ].code AS VARCHAR) WHEN valuestring IS NOT NULL THEN CAST(valuestring AS VARCHAR) WHEN valueboolean IS NOT NULL THEN CAST(valueboolean AS VARCHAR) WHEN valueinteger IS NOT NULL THEN CAST(valueinteger AS VARCHAR) WHEN valueratio IS NOT NULL THEN CONCAT(CAST(valueratio.numerator.value AS VARCHAR),'/',CAST(valueratio.denominator.value AS VARCHAR)) WHEN valuerange IS NOT NULL THEN CONCAT(CAST(valuerange.low.value AS VARCHAR),'-',CAST(valuerange.high.value AS VARCHAR)) WHEN valueSampledData IS NOT NULL THEN CAST(valueSampledData.data AS VARCHAR) WHEN valueTime IS NOT NULL THEN CAST(valueTime AS VARCHAR) WHEN valueDateTime IS NOT NULL THEN CAST(valueDateTime AS VARCHAR) WHEN valuePeriod IS NOT NULL THEN valuePeriod.start WHEN component[1] IS NOT NULL THEN CONCAT(CAST(component[2].valuequantity.value AS VARCHAR),' ',CAST(component[2].valuequantity.unit AS VARCHAR), '/', CAST(component[1].valuequantity.value AS VARCHAR),' ',CAST(component[1].valuequantity.unit AS VARCHAR)) END AS observationvalue , encounter.reference as encounterId , encounter.type as encountertype FROMdatabase.patient, observation WHERE CONCAT('Patient/', patient.id) = observation.subject.reference ORDER BY name;
Beispiel Erstellen Sie Filterbedingungen für einen Patienten und die zugehörigen Verfahren
Die Verknüpfung von Verfahren mit Patienten ist ein wichtiger Aspekt des Gesundheitswesens. Die folgende SQL-Beispielabfrage zeigt, wie FHIR Patient und Procedure Ressourcentypen verwendet werden, um dies zu erreichen. Die folgende SQL-Abfrage gibt alle Patienten und die zugehörigen Verfahren zurück, die sich in Ihrem HealthLake Datenspeicher befinden.
SELECT patient.id as patientId , PROCEDURE.id as procedureId , CONCAT(name[1].family, ' ', name[1].given[1]) as name , status , category.coding[1].code as categoryCode , category.coding[1].display as categoryDescription , code.coding[1].code as procedureCode , code.coding[1].display as procedureDescription , performeddatetime , performer[1] , encounter.reference as encounterId , encounter.type as encountertype FROMdatabase.patient, procedure WHERE CONCAT('Patient/', patient.id) = procedure.subject.reference ORDER BY name;
Sie können die Athena-Konsole verwenden, um die Ergebnisse für weitere Analysen herunterzuladen oder sie zu sortieren, um die Ergebnisse besser zu verstehen.
Beispiel Erstellen Sie Filterbedingungen für einen Patienten und die zugehörigen Verschreibungen
Es ist wichtig, eine aktuelle Liste der Medikamente zu sehen, die Patienten einnehmen. Mit Athena können Sie eine SQL-Abfrage schreiben, die sowohl die Ressourcentypen als auch die Patient in Ihrem HealthLake Datenspeicher enthaltenen MedicationRequest Ressourcentypen verwendet.
Die folgende SQL-Abfrage verknüpft die in Athena importierten MedicationRequest Tabellen Patient und. Außerdem werden die Rezepte mithilfe der Punktnotation in ihre einzelnen Einträge unterteilt.
SELECT patient.id as patientId , medicationrequest.id as medicationrequestid , CONCAT(name[1].family, ' ', name[1].given[1]) as name , status , statusreason.coding[1].code as categoryCode , statusreason.coding[1].display as categoryDescription , category[1].coding[1].code as categoryCode , category[1].coding[1].display as categoryDescription , priority , donotperform , encounter.reference as encounterId , encounter.type as encountertype , medicationcodeableconcept.coding[1].code as medicationCode , medicationcodeableconcept.coding[1].display as medicationDescription , dosageinstruction[1].text as dosage FROMdatabase.patient, medicationrequest WHERE CONCAT('Patient/', patient.id ) = medicationrequest.subject.reference ORDER BY name
Sie können die Athena-Konsole verwenden, um die Ergebnisse zu sortieren oder sie zur weiteren Analyse herunterzuladen.
Beispiel Sehen Sie sich die im MedicationStatement Ressourcentyp gefundenen Medikamente an
Die folgende Beispielabfrage zeigt Ihnen, wie Sie das verschachtelte JSON organisieren, das mithilfe von SQL in Athena importiert wurde. Die Abfrage verwendet das meta FHIR-Element, um anzugeben, wann ein Medikament durch HealthLake die integrierte Verarbeitung natürlicher Sprache (NLP) hinzugefügt wurde. Es wird auch verwendetjson_extract, um nach Daten innerhalb des Arrays von JSON-Zeichenketten zu suchen. Weitere Informationen finden Sie unter Natürliche Sprachverarbeitung.
SELECT medicationcodeableconcept.coding[1].code as medicationCode , medicationcodeableconcept.coding[1].display as medicationDescription , meta.tag[1].display , json_extract(modifierextension[1], '$.valueDecimal') AS confidenceScore FROM medicationstatement;
Sie können die Athena-Konsole verwenden, um diese Ergebnisse herunterzuladen oder zu sortieren.
Beispiel Filtern Sie nach einem bestimmten Krankheitstyp
Das Beispiel zeigt, wie Sie eine Gruppe von Patienten im Alter von 18 bis 75 Jahren finden können, bei denen Diabetes diagnostiziert wurde.
SELECT patient.id as patientId, condition.id as conditionId, CONCAT(name [ 1 ].family, ' ', name [ 1 ].given [ 1 ]) as name, (year(current_date) - year(date(birthdate))) AS age, CASE WHEN condition.encounter.reference IS NOT NULL THEN condition.encounter.reference WHEN observation.encounter.reference IS NOT NULL THEN observation.encounter.reference END as encounterId, CASE WHEN condition.encounter.type IS NOT NULL THEN observation.encounter.type WHEN observation.encounter.type IS NOT NULL THEN observation.encounter.type END AS encountertype, condition.code.coding [ 1 ].code as diagnosisCode, condition.code.coding [ 1 ].display as diagnosisDescription, observation.category [ 1 ].coding [ 1 ].code as categoryCode, observation.category [ 1 ].coding [ 1 ].display as categoryDescription, observation.code.coding [ 1 ].code as observationCode, observation.code.coding [ 1 ].display as observationDescription, effectivedatetime AS observationDateTime, CASE WHEN valuequantity.value IS NOT NULL THEN CONCAT(CAST(valuequantity.value AS VARCHAR),' ',valuequantity.unit) WHEN valueCodeableConcept.coding [ 1 ].code IS NOT NULL THEN CAST(valueCodeableConcept.coding [ 1 ].code AS VARCHAR) WHEN valuestring IS NOT NULL THEN CAST(valuestring AS VARCHAR) WHEN valueboolean IS NOT NULL THEN CAST(valueboolean AS VARCHAR) WHEN valueinteger IS NOT NULL THEN CAST(valueinteger AS VARCHAR) WHEN valueratio IS NOT NULL THEN CONCAT(CAST(valueratio.numerator.value AS VARCHAR),'/',CAST(valueratio.denominator.value AS VARCHAR)) WHEN valuerange IS NOT NULL THEN CONCAT(CAST(valuerange.low.value AS VARCHAR),'-',CAST(valuerange.high.value AS VARCHAR)) WHEN valueSampledData IS NOT NULL THEN CAST(valueSampledData.data AS VARCHAR) WHEN valueTime IS NOT NULL THEN CAST(valueTime AS VARCHAR) WHEN valueDateTime IS NOT NULL THEN CAST(valueDateTime AS VARCHAR) WHEN valuePeriod IS NOT NULL THEN valuePeriod.start WHEN component[1] IS NOT NULL THEN CONCAT(CAST(component[2].valuequantity.value AS VARCHAR),' ',CAST(component[2].valuequantity.unit AS VARCHAR), '/', CAST(component[1].valuequantity.value AS VARCHAR),' ',CAST(component[1].valuequantity.unit AS VARCHAR)) END AS observationvalue, CASE WHEN condition.meta.tag [ 1 ].display = 'SYSTEM GENERATED' THEN 'YES' WHEN condition.meta.tag [ 1 ].display IS NULL THEN 'NO' WHEN observation.meta.tag [ 1 ].display = 'SYSTEM GENERATED' THEN 'YES' WHEN observation.meta.tag [ 1 ].display IS NULL THEN 'NO' END AS IsSystemGenerated, CAST( json_extract( condition.modifierextension [ 1 ], '$.valueDecimal' ) AS int ) AS confidenceScore FROMdatabase.patient,database.condition,database.observation WHERE CONCAT('Patient/', patient.id) = condition.subject.reference AND CONCAT('Patient/', patient.id) = observation.subject.reference AND (year(current_date) - year(date(birthdate))) >= 18 AND (year(current_date) - year(date(birthdate))) <= 75 AND condition.code.coding [ 1 ].display like ('%diabetes%');
Jetzt können Sie die Ergebnisse mit der Athena-Konsole sortieren oder zur weiteren Analyse herunterladen.