

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 di HealthLake dati con Amazon Athena
<a name="integrating-athena"></a>

Durante un processo di HealthLake importazione, i dati JSON FHIR annidati vengono sottoposti a un processo ETL e vengono archiviati nel [formato di tabella aperta Apache Iceberg, in cui ogni tipo di risorsa FHIR è rappresentato come una tabella](https://iceberg.apache.org/) individuale in Athena. Ciò consente agli utenti di interrogare i dati FHIR utilizzando SQL, ma senza doverli prima esportare. Questo è prezioso, in quanto consente a medici e scienziati di interrogare i dati FHIR per convalidare le loro decisioni o far progredire la loro ricerca. *Per ulteriori informazioni sul funzionamento delle tabelle Apache Iceberg in Athena, consulta [Interrogare le tabelle Apache Iceberg nella Guida](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html) per l'utente di Athena.*

**Nota**  
HealthLake supporta l'`read`interazione FHIR R4 sui HealthLake dati in Athena. Per ulteriori informazioni, consulta [Leggere una risorsa FHIR](managing-fhir-resources-read.md).

Gli argomenti di questa sezione descrivono come connettere il tuo HealthLake data store ad Athena, come interrogarlo utilizzando SQL e come connettere i risultati con altri AWS servizi per ulteriori analisi.

**Topics**
+ [Nozioni di base](integrating-athena-getting-started.md)
+ [Interrogazione con SQL](integrating-athena-query-sql.md)
+ [Query di esempio](integrating-athena-complex-filtering.md)

# Guida introduttiva ad Amazon Athena
<a name="integrating-athena-getting-started"></a>

Per l'integrazione HealthLake con Amazon Athena, devi configurare le autorizzazioni. A tale scopo, creerai un utente, un gruppo o un ruolo Athena e concederai loro l'accesso alle risorse FHIR situate all'interno di un HealthLake archivio dati.
+ [Concedere a un utente, un gruppo o un ruolo l'accesso a un HealthLake data store (AWS Lake Formation Console)](#getting-started-athena-admin)
+ [Configurazione di un account Athena](#getting-started-athena-user)

## Concedere a un utente, un gruppo o un ruolo l'accesso a un HealthLake data store (AWS Lake Formation Console)
<a name="getting-started-athena-admin"></a>

**Persona: amministratore HealthLake**  
L' HealthLake amministratore è un amministratore del data lake di AWS Lake Formation. Consentono l'accesso agli archivi di HealthLake dati in Lake Formation.

Per ogni data store creato, ci sono due voci visibili nella console di AWS Lake Formation. Una voce è un *collegamento a una risorsa*. I nomi dei link alle risorse sono sempre visualizzati in *corsivo.* Ogni collegamento alla risorsa viene visualizzato con il nome e il proprietario della relativa risorsa condivisa collegata. Per tutti gli archivi HealthLake dati, il proprietario della risorsa condivisa è l'account HealthLake di servizio. L'altra voce è l'archivio HealthLake dati nell'account del HealthLake servizio. I passaggi di questa procedura utilizzano l'archivio dati che è il collegamento alla risorsa.

Per ulteriori informazioni sui collegamenti alle risorse, consulta [Come funzionano i collegamenti alle risorse in Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/resource-links-about.html) nella *AWS Lake Formation Developer Guide*.

Affinché un utente, un gruppo o un ruolo possa interrogare i dati in Athena, è necessario concedere l'autorizzazione **Descrivi** sul database delle risorse. Quindi, è necessario concedere **Select** e **Descrivi** sulle tabelle.

**FASE 1: **Concedere** le autorizzazioni DESCRIBE su un database di link alle risorse del HealthLake Data Store**

1. Apri la console AWS Lake Formation: [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com//lakeformation)

1. Nella barra di navigazione principale, scegli **Database**.

1. Nella pagina **Database**, scegli il pulsante di opzione accanto al nome del data store in corsivo.

1. Scegli **Azioni (▼).**

1. Scegliere **Concedi**.

1. Nella pagina **Concedi le autorizzazioni ai dati**, in **Principali**, scegli **utenti o ruoli IAM**.

1. In **Utenti o ruoli IAM**, utilizza la **freccia rivolta verso il basso (▼)** o cerca l'utente, il ruolo o il gruppo IAM su cui desideri poter effettuare interrogazioni in Athena.

1. In **LF-Tags o nella scheda delle risorse del catalogo**, scegli l'opzione **Named data** catalog resources.

1. In **Database**, utilizzate la **freccia rivolta verso il basso (▼)** per scegliere il database del HealthLake data store a cui desiderate condividere l'accesso.

1. **Nella scheda **Autorizzazioni Resource link, in Autorizzazioni** **Resource link, scegli Descrivi**.**

Quando la concessione ha esito positivo, viene visualizzato il banner **Concedi autorizzazione con successo**. Per visualizzare l'autorizzazione appena concessa, scegli **Autorizzazioni Data lake**. Trova l'utente, il gruppo e il ruolo nella tabella. Nella colonna **Autorizzazioni**, vedrai l'elenco **Descrivi**.

Ora devi usare **Grant on target per concedere** **Select** e **Descrivi** su tutte le tabelle del database.

**FASE 2: Concedere l'accesso a tutte le tabelle in un collegamento alle risorse del HealthLake data store**

1. Apri la console AWS Lake Formation: [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com//lakeformation)

1. Nella barra di navigazione principale, scegli **Database**.

1. Nella pagina **Database**, scegli il pulsante di opzione accanto al nome del data store in corsivo.

1. Scegli **Azioni (▼).**

1. Scegli **Grant on target**.

1. Nella pagina **Concedi le autorizzazioni ai dati**, in **Principali**, scegli **utenti o ruoli IAM**.

1. In **Utenti o ruoli IAM**, utilizza la **freccia rivolta verso il basso (▼)** o cerca l'utente, il gruppo o il ruolo IAM su cui desideri poter effettuare interrogazioni in Athena.

1. In **LF-Tags o nella scheda delle risorse del catalogo**, scegli l'opzione **Named data** catalog resources.

1. In **Database**, utilizzate la **freccia rivolta verso il basso (▼)** per scegliere il database del HealthLake data store a cui desiderate concedere l'accesso.

1. In **Tabelle**, scegli **Tutte le tabelle** per condividere tutte le tabelle con un HealthLake utente.

1. **Nella scheda **Autorizzazioni della tabella, in Autorizzazioni** della **tabella**, scegli **Descrivi** e seleziona.**

1. Scegliere **Concedi**.

Dopo aver scelto Concedi, viene visualizzato il banner **Concedi autorizzazioni di successo**. L'utente specificato può ora effettuare interrogazioni su un archivio HealthLake dati in Athena.

## Guida introduttiva ad Athena
<a name="getting-started-athena-user"></a>

**HealthLake utente**  
L' HealthLake utente utilizzerà la console Athena o AWS SDKs interrogherà un HealthLake data store condiviso con lui dall' HealthLake amministratore. AWS CLI

Per interrogare un data store utilizzando Athena, è necessario eseguire le tre operazioni seguenti.
+ Concedi all'utente o al ruolo IAM l'accesso al HealthLake data store tramite Lake Formation. Per ulteriori informazioni, consulta [Concedere a un utente, un gruppo o un ruolo l'accesso a un HealthLake data store (AWS Lake Formation Console)](#getting-started-athena-admin).
+ Crea un gruppo di lavoro per il tuo HealthLake data store.
+ Imposta un bucket Amazon S3 per archiviare i risultati delle query.

Per iniziare a usare Athena, aggiungi le **AmazonAthenaFullAccess**policy FullAccess AWS gestite da **AmazonS3** al tuo utente, gruppo o ruolo. L'utilizzo di una politica AWS gestita è un ottimo modo per iniziare a utilizzare un nuovo servizio. Tieni presente che le policy gestite da AWS potrebbero non concedere autorizzazioni con privilegi minimi per i tuoi casi d'uso specifici perché sono disponibili per l'uso da parte di tutti i clienti AWS. Quando imposti le autorizzazioni con le policy IAM, concedi solo le autorizzazioni richieste per eseguire un'attività. [https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-use-aws-defined-policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-use-aws-defined-policies)

**Importante**  
Per interrogare un archivio HealthLake dati in Athena, è necessario utilizzare la versione 3 del motore **Athena**.

I gruppi di lavoro sono risorse e pertanto è possibile utilizzare policy basate su IAM per controllare l'accesso a gruppi di lavoro specifici. Per ulteriori informazioni, consulta [Utilizzo dei gruppi di lavoro per controllare l'accesso alle query e i costi nella Guida](https://docs.aws.amazon.com/athena/latest/ug/manage-queries-control-costs-with-workgroups.html) per l'utente di *Athena*.

Per ulteriori informazioni sulla configurazione dei gruppi di lavoro, consulta [https://docs.aws.amazon.com/athena/latest/ug/workgroups-procedure.html](https://docs.aws.amazon.com/athena/latest/ug/workgroups-procedure.html) la Guida per l'utente di *Athena*.

**Nota**  
La regione in cui si trova il bucket Amazon S3 e la console Athena devono corrispondere.

Prima di poter eseguire una query, è necessario specificare una posizione del bucket dei risultati delle query in Amazon S3, o utilizzare un gruppo di lavoro che ha specificato un bucket e la cui configurazione sostituisce le impostazioni del client. I file di output vengono salvati automaticamente per ogni query eseguita.

*Per ulteriori dettagli sulla specificazione delle posizioni dei risultati delle query nella console Athena, [consulta Specificare una posizione dei risultati delle query utilizzando la console Athena nella Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/querying.html#query-results-specify-location-console) User Guide.*

Per vedere esempi di come interrogare il tuo archivio HealthLake dati in Athena, consulta. [Interrogazione HealthLake dei dati con SQL](integrating-athena-query-sql.md)

# 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)

------

# Esempi di query SQL con filtri complessi
<a name="integrating-athena-complex-filtering"></a>

Gli esempi seguenti mostrano come utilizzare le query SQL di Amazon Athena con filtri complessi per localizzare i dati FHIR da un data store. HealthLake 

**Example Crea criteri di filtraggio basati su dati demografici**  
L'identificazione dei dati demografici corretti dei pazienti è importante quando si crea una coorte di pazienti. Questa query di esempio dimostra come utilizzare la notazione a punti Trino e `json_extract` filtrare i dati nell'archivio dati. HealthLake   

```
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
FROM database.patient;
```
Utilizzando la console Athena, puoi ordinare e scaricare ulteriormente i risultati.

**Example Crea filtri per un paziente e le sue condizioni correlate**  
La seguente query di esempio mostra come è possibile trovare e ordinare tutte le condizioni correlate per i pazienti presenti in un archivio HealthLake dati.  

```
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
FROM database.patient, condition
WHERE CONCAT('Patient/', patient.id) = condition.subject.reference
ORDER BY name;
```
Puoi utilizzare la console Athena per ordinare ulteriormente i risultati o scaricarli per ulteriori analisi.

**Example Crea filtri per i pazienti e le relative osservazioni**  
La seguente query di esempio mostra come trovare e ordinare tutte le osservazioni correlate per i pazienti trovate in un archivio HealthLake dati.  

```
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
FROM database.patient, observation
WHERE CONCAT('Patient/', patient.id) = observation.subject.reference
ORDER BY name;
```

**Example Crea condizioni di filtraggio per un paziente e le relative procedure**  
Collegare le procedure ai pazienti è un aspetto importante dell'assistenza sanitaria. La seguente query di esempio SQL dimostra come utilizzare FHIR `Patient` e i tipi di `Procedure` risorse per eseguire questa operazione. La seguente query SQL restituirà tutti i pazienti e le relative procedure presenti nell'archivio dati HealthLake .  

```
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
FROM database.patient, procedure
WHERE CONCAT('Patient/', patient.id) = procedure.subject.reference
ORDER BY name;
```
Puoi utilizzare la console Athena per scaricare i risultati per ulteriori analisi o ordinarli per comprenderli meglio.

**Example Crea condizioni di filtraggio per un paziente e le relative prescrizioni**  
È importante consultare un elenco aggiornato dei farmaci che i pazienti assumono. Usando Athena, puoi scrivere una query SQL che utilizza sia i `Patient` tipi di `MedicationRequest` risorse che si trovano nel tuo archivio HealthLake dati.  
La seguente query SQL unisce le `MedicationRequest` tabelle `Patient` e importate in Athena. Inoltre, organizza le prescrizioni nelle rispettive voci utilizzando la notazione a punti.  

```
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
FROM database.patient, medicationrequest
WHERE CONCAT('Patient/', patient.id ) = medicationrequest.subject.reference
ORDER BY name
```
Puoi utilizzare la console Athena per ordinare i risultati o scaricarli per ulteriori analisi.

**Example Vedi i farmaci presenti nel tipo di `MedicationStatement` risorsa**  
La seguente query di esempio mostra come organizzare il JSON annidato importato in Athena utilizzando SQL. La query utilizza l'`meta`elemento FHIR per indicare quando è stato aggiunto un farmaco mediante l'elaborazione integrata HealthLake del linguaggio naturale (NLP). Viene inoltre utilizzato `json_extract` per cercare dati all'interno dell'array di stringhe JSON. Per ulteriori informazioni, consulta [Elaborazione linguaggio naturale](integrating-nlp.md).  

```
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;
```
Puoi usare la console Athena per scaricare questi risultati o ordinarli.

**Example Filtra per un tipo di malattia specifico**  
L'esempio mostra come trovare un gruppo di pazienti, di età compresa tra 18 e 75 anni, a cui è stato diagnosticato il diabete.  

```
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
FROM database.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%');
```
Ora puoi usare la console Athena per ordinare i risultati o scaricarli per ulteriori analisi.