

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
<a name="integrating-athena-query-sql"></a>

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](https://docs.aws.amazon.com/athena/latest/ug/rows-and-structs.html) 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](managing-data-stores-create.md)

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](https://hl7.org/fhir/R4/patient.html) 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ürde`family`.

  ```
  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ürde`text`.

  ```
  SELECT
      maritalstatus.text as MaritalStatus
  FROM Patient
  ```

Weitere Informationen zum Zugreifen auf und Durchsuchen von JSON finden Sie unter [JSON abfragen](https://docs.aws.amazon.com//athena/latest/ug/querying-JSON.html) 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](https://docs.aws.amazon.com/athena/latest/ug/functions-operators-reference-section.html) 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](https://docs.aws.amazon.com/athena/latest/ug/data-types.html) *Athena-Benutzerhandbuch*.

Weitere Informationen zur Funktionsweise von SQL-Abfragen in Athena finden Sie unter [SQL-Referenz für Amazon Athena im Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/ddl-sql-reference.html) *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 Element`Patient`, das als `extension` beschrieben wird`array<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 verwenden`json_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](https://docs.aws.amazon.com/athena/latest/ug/extracting-data-from-JSON.html) 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 sind`male`.

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 eingeben`DATE`. 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 unter[Integrierte Verarbeitung natürlicher Sprache (NLP) für HealthLake](integrating-nlp.md).

```
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önnen`Condition`, was auf der Grundlage einer bestimmten Abfrage generiert wurde. `DocumentReference` Verwenden Sie diese Option`CAST`, 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 [https://iceberg.apache.org/spec/#schemas-and-data-types](https://iceberg.apache.org/spec/#schemas-and-data-types). 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](integrating-nlp.md)

------