

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

Quando importi i dati FHIR nell'archivio dati, HealthLake i dati JSON FHIR annidati vengono contemporaneamente sottoposti a un processo ETL e vengono archiviati in formato 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 utilizzando query basate su SQL. A causa della struttura degli archivi 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 [Matrici di query con tipi complessi e strutture annidate](https://docs.aws.amazon.com/athena/latest/ug/rows-and-structs.html) nella *Amazon* Athena User Guide.

**Nota**  
Tutti gli esempi in questo argomento utilizzano dati fittizi creati con Synthea. Per ulteriori informazioni sulla creazione di un data store precaricato con dati Synthea, consulta. [Creazione di un archivio HealthLake dati](managing-data-stores-create.md)

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, diamo un'occhiata ad alcuni elementi in [Tipo di risorsa: Paziente](https://hl7.org/fhir/R4/patient.html).
+ **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 importato 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 consentirebbe di accedere ai valori di `given` e`family`.

  ```
  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 importato 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 consentirebbe di accedere al valore di`text`.

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

*Per ulteriori informazioni sull'accesso e sulla ricerca in JSON, consulta [Querying JSON](https://docs.aws.amazon.com//athena/latest/ug/querying-JSON.html) nella Athena User Guide.*

Le istruzioni di interrogazione DML (Athena Data Manipulation Language) sono basate su Trino. *Athena non supporta tutte le funzionalità di Trino e presenta differenze significative.* Per ulteriori informazioni, consulta le [interrogazioni, le funzioni e gli operatori DML](https://docs.aws.amazon.com/athena/latest/ug/functions-operators-reference-section.html) nella Guida per l'utente di *Amazon Athena*.

Inoltre, Athena supporta diversi tipi di dati che potresti incontrare durante la creazione di query sul tuo HealthLake archivio dati. Per ulteriori informazioni sui tipi di dati in Athena, consulta [Tipi di dati in Amazon Athena nella Amazon](https://docs.aws.amazon.com/athena/latest/ug/data-types.html) Athena User *Guide*.

*Per ulteriori informazioni su come funzionano le query SQL in Athena, [consulta il riferimento SQL per Amazon Athena nella Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/ddl-sql-reference.html) 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'`extension`elemento presente nel tipo di `Patient` risorsa.

Quando l'archivio HealthLake dati 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 di`Patient`, è possibile vedere l'elemento `extension` descritto come`array<string>`, il che significa che è possibile accedere agli elementi dell'array utilizzando un valore di indice. Per accedere agli elementi della stringa, tuttavia, è necessario utilizzare`json_extract`.

Ecco una singola voce dell'`extension`elemento che si trova 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 [Estrazione di dati da JSON](https://docs.aws.amazon.com/athena/latest/ug/extracting-data-from-JSON.html) nella Amazon Athena User Guide.*

------
#### [ Element: birthDate (Age) ]

L'età *non* è un elemento del tipo di risorsa per i pazienti 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, cercate 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 `year` per estrarre tali componenti. `current_date` Quindi, li sottraiamo per restituire l'età effettiva del paziente, sotto forma di colonna denominata`age`.

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

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

La query SQL mostra come utilizzare la `CAST` funzione per convertire l'`birthDate`elemento 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` Utilizzando`AND`, è possibile 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 relativa al tipo di risorsa memorizza i dati di diagnosi relativi a problemi che hanno raggiunto un livello di preoccupazione. HealthLakel'elaborazione medica integrata del linguaggio naturale (NLP) genera *nuove* `Condition` risorse sulla base dei dettagli presenti nel DocumentReference tipo di risorsa. Quando viene generata una nuova risorsa, HealthLake aggiunge il tag `SYSTEM_GENERATED` all'elemento. `meta` Questa query SQL di esempio dimostra come è possibile cercare 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](integrating-nlp.md)

```
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'`modifierextension`elemento contiene dettagli su quale `DocumentReference` risorsa è stata utilizzata per generare un insieme di condizioni. Ancora una volta, è necessario utilizzare `json_extract` per accedere agli elementi JSON annidati che vengono importati in Athena come stringa.

Questa query SQL di esempio dimostra come è possibile cercare tutto ciò `Condition` che è stato generato in base a uno specifico. `DocumentReference` `CAST`Da utilizzare per 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 argomento. HealthLake(Natural Language Processing, NLP) integrata genera *nuove* `Observation` risorse sulla base dei dettagli presenti in una risorsa. `DocumentReference` Questa query SQL di esempio include `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 [https://iceberg.apache.org/spec/#schemas-and-data-types](https://iceberg.apache.org/spec/#schemas-and-data-types). Pertanto, è possibile accedere agli elementi al suo interno utilizzando la notazione a punti.

------
#### [ Resource type: MedicationStatement ]

MedicationStatement è un tipo di risorsa FHIR che è possibile utilizzare per memorizzare informazioni sui farmaci che un paziente ha assunto, sta assumendo o assumerà in futuro. HealthLakel'elaborazione medica integrata del linguaggio naturale (NLP) 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 una query che filtra in base a un singolo paziente utilizzando il relativo identificatore e trova 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 ulteriori informazioni sull'elaborazione integrata HealthLake del linguaggio naturale (NLP), vedere. [Elaborazione integrata del linguaggio naturale (NLP) per HealthLake](integrating-nlp.md)

------