

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Consultando HealthLake dados com o Amazon Athena
<a name="integrating-athena"></a>

Durante um trabalho de HealthLake importação, os dados JSON FHIR aninhados passam por um processo ETL e são armazenados no [formato de tabela aberta Apache Iceberg, em que cada tipo de recurso FHIR é representado como uma tabela](https://iceberg.apache.org/) individual no Athena. Isso permite que os usuários consultem os dados do FHIR usando SQL, mas sem precisar exportá-los primeiro. Isso é valioso, pois capacita médicos e cientistas a consultar dados do FHIR para validar suas decisões ou avançar em suas pesquisas. *Para obter mais informações sobre como as tabelas do Apache Iceberg funcionam no Athena, consulte [Consultar tabelas do Apache Iceberg](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg.html) no Guia do usuário do Athena.*

**nota**  
HealthLake suporta a `read` interação FHIR R4 em seus dados no Athena HealthLake . Para obter mais informações, consulte [Lendo um recurso do FHIR](managing-fhir-resources-read.md).

Os tópicos desta seção descrevem como conectar seu armazenamento de HealthLake dados ao Athena, como consultá-lo usando SQL e como conectar resultados a outros AWS serviços para análise posterior.

**Topics**
+ [Introdução](integrating-athena-getting-started.md)
+ [Consultando com SQL](integrating-athena-query-sql.md)
+ [Consultas de exemplo](integrating-athena-complex-filtering.md)

# Comece a usar o Amazon Athena
<a name="integrating-athena-getting-started"></a>

Para fazer a integração HealthLake com o Amazon Athena, você deve configurar permissões. Para fazer isso, você criará um usuário, grupo ou função do Athena e concederá a eles acesso aos recursos do FHIR localizados em um armazenamento de dados. HealthLake 
+ [Conceder a um usuário, grupo ou função acesso a um armazenamento de HealthLake dados (AWS Lake Formation Console)](#getting-started-athena-admin)
+ [Configurando uma conta Athena](#getting-started-athena-user)

## Conceder a um usuário, grupo ou função acesso a um armazenamento de HealthLake dados (AWS Lake Formation Console)
<a name="getting-started-athena-admin"></a>

**Pessoa: administrador HealthLake**  
A pessoa HealthLake administradora é uma administradora de data lake em AWS Lake Formation. Eles concedem acesso aos armazenamentos de HealthLake dados em Lake Formation.

Para cada armazenamento de dados criado, há duas entradas visíveis no console do AWS Lake Formation. Uma entrada é um *link de recurso*. Os nomes dos links de recursos são sempre exibidos em *itálico.* Cada link de recurso é exibido com o nome e o proprietário do recurso compartilhado vinculado. Para todos os armazenamentos de HealthLake dados, o proprietário do recurso compartilhado é a conta HealthLake de serviço. A outra entrada é o armazenamento HealthLake de dados na conta HealthLake de serviço. As etapas desse procedimento usam o armazenamento de dados que é o link do recurso.

Para saber mais sobre links de recursos, consulte [Como os links de recursos funcionam no Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/resource-links-about.html) no *AWS Lake Formation Developer Guide*.

Para que um usuário, grupo ou função possa consultar dados no Athena, você deve conceder a permissão **Descreve** no banco de dados de recursos. Em seguida, você deve conceder **Selecionar** e **Descrever** nas tabelas.

**ETAPA 1: Para conceder permissões **DESCRIBE** em um banco de HealthLake dados de links de recursos do armazenamento de dados**

1. Abra o console do AWS Lake Formation: [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com//lakeformation)

1. Na barra de navegação principal, escolha **Bancos de dados**.

1. Na página **Bancos** de dados, escolha o botão de rádio ao lado do nome do armazenamento de dados que está em itálico.

1. Escolha **Ações (▼)**.

1. Selecione **Conceder**.

1. Na página **Conceder permissões de dados**, em **Diretores**, escolha **usuários ou funções do IAM**.

1. Em **Usuários ou funções do IAM**, use a **seta para baixo (▼)** ou pesquise o usuário, a função ou o grupo do IAM sobre o qual você deseja poder fazer consultas no Athena.

1. Em **LF-Tags ou cartão de recursos do catálogo**, escolha a opção Recursos do **catálogo de dados nomeados**.

1. Em **Bancos de dados**, use a **seta para baixo (▼)** para escolher o banco de HealthLake dados do armazenamento de dados ao qual você deseja compartilhar o acesso.

1. No cartão **Permissões do link do recurso**, em **Permissões do link do recurso**, escolha **Descrever**.

Quando a concessão é bem-sucedida, o banner **Conceder permissão de sucesso** é exibido. Para ver a permissão que você acabou de conceder, escolha **Permissões do Data lake**. Encontre o usuário, o grupo e a função na tabela. Na coluna **Permissões**, você verá a lista **Descrever**.

Agora você deve usar **Grant on target** para conceder **Selecionar** e **Descrever** em todas as tabelas no banco de dados.

**ETAPA 2: Conceder acesso a todas as tabelas em um link de recurso do armazenamento de HealthLake dados**

1. Abra o console do AWS Lake Formation: [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com//lakeformation)

1. Na barra de navegação principal, escolha **Bancos de dados**.

1. Na página **Bancos** de dados, escolha o botão de rádio ao lado do nome do armazenamento de dados que está em itálico.

1. Escolha **Ações (▼)**.

1. Escolha **Grant no alvo**.

1. Na página **Conceder permissões de dados**, em **Diretores**, escolha **usuários ou funções do IAM**.

1. Em **Usuários ou funções do IAM**, use a **seta para baixo (▼)** ou pesquise o usuário, grupo ou função do IAM sobre o qual você deseja poder fazer consultas no Athena.

1. Em **LF-Tags ou cartão de recursos do catálogo**, escolha a opção Recursos do **catálogo de dados nomeados**.

1. Em **Bancos de dados**, use a **seta para baixo (▼)** para escolher o banco de HealthLake dados do armazenamento de dados ao qual você deseja conceder acesso.

1. Em **Tabelas**, escolha **Todas as tabelas** para compartilhar todas as tabelas com um HealthLake usuário.

1. No cartão **Permissões da tabela**, em **Permissões da tabela**, escolha **Descrever** e **selecionar**.

1. Selecione **Conceder**.

Depois de escolher conceder, um banner de **sucesso de permissões de concessão** é exibido. O usuário especificado agora pode fazer consultas em um armazenamento de HealthLake dados no Athena.

## Começando com Athena
<a name="getting-started-athena-user"></a>

**HealthLake usuário**  
O HealthLake usuário usará o console do Athena ou AWS SDKs para consultar um armazenamento de HealthLake dados compartilhado com ele pelo HealthLake administrador. AWS CLI

Para consultar um armazenamento de dados usando o Athena, você deve fazer as três coisas a seguir.
+ Conceda ao usuário ou à função do IAM acesso ao armazenamento de HealthLake dados por meio do Lake Formation. Para saber mais, consulte [Conceder a um usuário, grupo ou função acesso a um armazenamento de HealthLake dados (AWS Lake Formation Console)](#getting-started-athena-admin).
+ Crie um grupo de trabalho para seu armazenamento HealthLake de dados.
+ Designe um bucket do Amazon S3 para armazenar os resultados da consulta.

Para começar a usar o Athena, adicione as políticas FullAccess AWS gerenciadas **AmazonAthenaFullAccess**e o **AmazonS3** ao seu usuário, grupo ou função. Usar uma política AWS gerenciada é uma ótima maneira de começar a usar um novo serviço. Lembre-se de que as políticas gerenciadas pela AWS podem não conceder permissões de privilégio mínimo para seus casos de uso específicos porque estão disponíveis para uso por todos os clientes da AWS. Ao definir permissões com as políticas do IAM, conceda apenas as permissões necessárias para executar uma tarefa. *Para saber mais sobre o IAM e a aplicação de privilégios mínimos, consulte [Aplicar permissões de privilégios mínimos no Guia do usuário](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-use-aws-defined-policies) do IAM.*

**Importante**  
Para consultar um armazenamento HealthLake de dados no Athena, você deve usar o mecanismo **Athena versão 3**.

Grupos de trabalho são recursos e, portanto, você pode usar políticas baseadas em IAM para controlar o acesso a grupos de trabalho específicos. Para saber mais, consulte Como [usar grupos de trabalho para controlar o acesso e os custos das consultas no Guia](https://docs.aws.amazon.com/athena/latest/ug/manage-queries-control-costs-with-workgroups.html) do usuário do *Athena*.

Para saber mais sobre como configurar grupos de trabalho, consulte o Guia do [https://docs.aws.amazon.com/athena/latest/ug/workgroups-procedure.html](https://docs.aws.amazon.com/athena/latest/ug/workgroups-procedure.html) usuário do *Athena*.

**nota**  
A região em que seu bucket do Amazon S3 está e o console do Athena devem corresponder.

Antes de executar uma consulta, um local de bucket de resultados de consultas do Amazon S3 precisa ser especificado, ou você deve usar um grupo de trabalho que especificou um bucket e com uma configuração que substitui as configurações do cliente. Os arquivos de saída são salvos automaticamente para cada consulta executada.

*Para obter mais detalhes sobre a especificação dos locais dos resultados da consulta no console do Athena, [consulte Especificação de um local do resultado da consulta usando o console do Athena no Guia do usuário do Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/querying.html#query-results-specify-location-console).*

Para ver exemplos de como consultar seu armazenamento de HealthLake dados no Athena, consulte. [Consultando HealthLake dados com SQL](integrating-athena-query-sql.md)

# Consultando HealthLake dados com SQL
<a name="integrating-athena-query-sql"></a>

Quando você importa seus dados FHIR para o armazenamento de dados, HealthLake os dados JSON FHIR aninhados passam simultaneamente por um processo de ETL e são armazenados no formato de tabela aberta Apache Iceberg no Amazon S3. Cada tipo de recurso FHIR do seu armazenamento de HealthLake dados é convertido em uma tabela, onde pode ser consultado usando o Amazon Athena. As tabelas podem ser consultadas individualmente ou em grupo usando consultas baseadas em SQL. Devido à estrutura dos armazenamentos de dados, seus dados são importados para o Athena como vários tipos de dados diferentes. Para saber mais sobre a criação de consultas SQL que podem acessar esses tipos de dados, consulte [Matrizes de consultas com tipos complexos e estruturas aninhadas](https://docs.aws.amazon.com/athena/latest/ug/rows-and-structs.html) no Guia do usuário do *Amazon* Athena.

**nota**  
Todos os exemplos neste tópico usam dados fictícios criados usando o Synthea. Para saber mais sobre como criar um armazenamento de dados pré-carregado com dados Synthea, consulte. [Criando um armazenamento HealthLake de dados](managing-data-stores-create.md)

Para cada elemento em um tipo de recurso, a especificação FHIR define uma cardinalidade. A cardinalidade de um elemento define os limites inferior e superior de quantas vezes esse elemento pode aparecer. Ao criar uma consulta SQL, você deve levar isso em consideração. Por exemplo, vamos ver alguns elementos em [Tipo de recurso: Paciente](https://hl7.org/fhir/R4/patient.html).
+ **Elemento: Nome** A especificação FHIR define a cardinalidade como. `0..*`

  O elemento é capturado como uma matriz.

  ```
  [{
  	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
  }]
  ```

  No Athena, para ver como um tipo de recurso foi ingerido, procure-o em **Tabelas** e visualizações. Para acessar elementos nessa matriz, você pode usar a notação de pontos. Aqui está um exemplo simples que acessaria os valores de `given` `family` e.

  ```
  SELECT
      name[1].given as FirstName,
      name[1].family as LastName
  FROM Patient
  ```
+ **Elemento: MaritalStatus** A especificação FHIR define a cardinalidade como. `0..1`

  Esse elemento é capturado como 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
  }
  ```

  No Athena, para ver como um tipo de recurso foi ingerido, procure-o em **Tabelas** e visualizações. Para acessar pares de valores-chave no JSON, você pode usar a notação de pontos. Como não é uma matriz, nenhum índice de matriz é necessário. Aqui está um exemplo simples que acessaria o valor de`text`.

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

*Para saber mais sobre como acessar e pesquisar JSON, consulte [Consultar JSON](https://docs.aws.amazon.com//athena/latest/ug/querying-JSON.html) no Guia do usuário do Athena.*

As instruções de consulta da Athena Data Manipulation Language (DML) são baseadas no Trino. *O Athena não suporta todos os recursos do Trino e há diferenças significativas.* Para saber mais, consulte [consultas, funções e operadores de DML no Guia](https://docs.aws.amazon.com/athena/latest/ug/functions-operators-reference-section.html) do usuário do *Amazon Athena*.

Além disso, o Athena oferece suporte a vários tipos de dados que você pode encontrar ao criar consultas em seu HealthLake armazenamento de dados. Para saber mais sobre os tipos de dados no Athena, consulte [Tipos de dados no Amazon Athena no Guia](https://docs.aws.amazon.com/athena/latest/ug/data-types.html) do usuário do Amazon *Athena*.

Para saber mais sobre como as consultas SQL funcionam no Athena, [consulte a referência de SQL para o Amazon Athena no Guia do usuário do Amazon](https://docs.aws.amazon.com/athena/latest/ug/ddl-sql-reference.html) *Athena*.

Cada guia mostra exemplos de como pesquisar os tipos de recursos especificados e os elementos associados usando o Athena.

------
#### [ Element: Extension ]

O elemento `extension` é usado para criar campos personalizados em um armazenamento de dados.

Este exemplo mostra como acessar os recursos do `extension` elemento encontrado no tipo de `Patient` recurso.

Quando seu armazenamento HealthLake de dados é importado para o Athena, os elementos de um tipo de recurso são analisados de forma diferente. Como a estrutura do `element` é variável, ela não pode ser totalmente especificada no esquema. Para lidar com essa variabilidade, os elementos dentro da matriz são passados como strings.

Na descrição da tabela de`Patient`, você pode ver o elemento `extension` descrito como`array<string>`, o que significa que você pode acessar os elementos da matriz usando um valor de índice. Para acessar os elementos da string, no entanto, você deve usar`json_extract`.

Aqui está uma única entrada do `extension` elemento encontrado na tabela de pacientes.

```
[{
		"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"
	}
]
```

Embora seja um JSON válido, Athena o trata como uma string.

Este exemplo de consulta SQL demonstra como você pode criar uma tabela que contém os `patient-birthPlace` elementos `patient-mothersMaidenName` e. Para acessar esses elementos, você precisa usar diferentes índices de matriz 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
```

*Para saber mais sobre consultas que envolvem JSON, consulte [Extração de dados do JSON no Guia do usuário do](https://docs.aws.amazon.com/athena/latest/ug/extracting-data-from-JSON.html) Amazon Athena.*

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

A idade *não* é um elemento do tipo de recurso do paciente no FHIR. Aqui estão dois exemplos de pesquisas que filtram com base na idade.

Como a idade não é um elemento, usamos o `birthDate` para as consultas SQL. Para ver como um elemento foi ingerido no FHIR, pesquise o nome da tabela em **Tabelas** e visualizações. Você pode ver que é do tipo **string**.

**Exemplo 1**: Calculando um valor para a idade

Neste exemplo de consulta SQL, usamos uma ferramenta SQL integrada `current_date` e `year` extraímos esses componentes. Em seguida, nós os subtraímos para retornar a idade real do paciente como uma coluna chamada`age`.

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

**Exemplo 2**: Filtragem para pacientes que nasceram antes `2019-01-01` e são`male`.

A consulta SQL mostra como usar a `CAST` função para converter o `birthDate` elemento como tipo `DATE` e como filtrar com base em dois critérios na `WHERE` cláusula. Como o elemento é ingerido como **string** de tipo por padrão, devemos `CAST` usá-lo como tipo`DATE`. Em seguida, você pode usar o `<` operador para compará-lo com uma data diferente,`2019-01-01`. Ao usar`AND`, você pode adicionar um segundo critério à `WHERE` cláusula.

```
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 ]

Este exemplo mostra pesquisas por locais dentro do tipo de recurso Localização em que o nome da cidade é 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 ]

A condição do tipo de recurso armazena dados de diagnóstico relacionados a problemas que atingiram um nível de preocupação. HealthLakeO processamento médico de linguagem natural (PNL) integrado da gera *novos* `Condition` recursos com base nos detalhes encontrados no tipo de DocumentReference recurso. Quando um novo recurso é gerado, HealthLake anexa a tag `SYSTEM_GENERATED` ao `meta` elemento. Esse exemplo de consulta SQL demonstra como você pode pesquisar a tabela de condições e retornar os resultados em que os `SYSTEM_GENERATED` resultados foram removidos.

Para saber mais sobre o processamento integrado HealthLake de linguagem natural (NLP), consulte[Processamento de linguagem natural (NLP) integrado para HealthLake](integrating-nlp.md).

```
SELECT *
FROM condition
WHERE meta.tag[1] is NULL
```

Você também pode pesquisar em um elemento de string especificado para filtrar ainda mais sua consulta. O `modifierextension` elemento contém detalhes sobre qual `DocumentReference` recurso foi usado para gerar um conjunto de condições. Novamente, você deve usar `json_extract` para acessar os elementos JSON aninhados que são trazidos para o Athena como uma string.

Esse exemplo de consulta SQL demonstra como você pode pesquisar tudo o `Condition` que foi gerado com base em um específico`DocumentReference`. Use `CAST` para definir o elemento JSON como uma string para que você possa usá-lo `LIKE` para comparar.

```
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 ]

O tipo de recurso, Observação, armazena medidas e afirmações simples feitas sobre um paciente, dispositivo ou outro assunto. HealthLakeO processamento integrado de linguagem natural (PNL) da gera *novos* `Observation` recursos com base nos detalhes encontrados em um `DocumentReference` recurso. Esse exemplo de consulta SQL inclui `WHERE meta.tag[1] is NULL` comentários, o que significa que os `SYSTEM_GENERATED` resultados estão incluídos.

```
SELECT valueCodeableConcept.coding[1].code
FROM Observation
WHERE  valueCodeableConcept.coding[1].code = '266919005'
-- WHERE meta.tag[1] is NULL
```

Essa coluna foi importada como uma [https://iceberg.apache.org/spec/#schemas-and-data-types](https://iceberg.apache.org/spec/#schemas-and-data-types). Portanto, você pode acessar elementos dentro dele usando a notação de pontos.

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

MedicationStatement é um tipo de recurso FHIR que você pode usar para armazenar detalhes sobre medicamentos que um paciente tomou, está tomando ou tomará no futuro. HealthLakeO processamento médico integrado de linguagem natural (PNL) gera novos MedicationStatement recursos com base em documentos encontrados no tipo de DocumentReference recurso. Quando novos recursos são gerados, HealthLake anexa a tag `SYSTEM_GENERATED` ao `meta` elemento. Este exemplo de consulta SQL demonstra como criar uma consulta que filtra com base em um único paciente usando seu identificador e encontra recursos que foram adicionados pela PNL integrada HealthLake da.

```
SELECT *
FROM medicationstatement
WHERE meta.tag[1].display = 'SYSTEM_GENERATED' AND subject.reference = 'Patient/0679b7b7-937d-488a-b48d-6315b8e7003b';
```

Para saber mais sobre o processamento integrado HealthLake de linguagem natural (NLP), consulte[Processamento de linguagem natural (NLP) integrado para HealthLake](integrating-nlp.md).

------

# Exemplos de consultas SQL com filtragem complexa
<a name="integrating-athena-complex-filtering"></a>

Os exemplos a seguir demonstram como usar consultas SQL do Amazon Athena com filtragem complexa para localizar dados FHIR de um armazenamento de dados. HealthLake 

**Example Crie critérios de filtragem com base em dados demográficos**  
Identificar os dados demográficos corretos do paciente é importante ao criar uma coorte de pacientes. Esse exemplo de consulta demonstra como você pode usar a notação de pontos Trino e `json_extract` filtrar dados em seu HealthLake armazenamento de dados.  

```
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;
```
Usando o Athena Console, você pode classificar e baixar ainda mais os resultados.

**Example Crie filtros para um paciente e suas condições relacionadas**  
O exemplo de consulta a seguir demonstra como você pode encontrar e classificar todas as condições relacionadas aos pacientes encontrados em um armazenamento de HealthLake dados.  

```
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;
```
Você pode usar o console do Athena para classificar melhor os resultados ou baixá-los para análise posterior.

**Example Crie filtros para pacientes e suas observações relacionadas**  
O exemplo de consulta a seguir demonstra como encontrar e classificar todas as observações relacionadas para pacientes encontradas em um armazenamento de HealthLake dados.  

```
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 Crie condições de filtragem para um paciente e seus procedimentos relacionados**  
Conectar procedimentos aos pacientes é um aspecto importante da assistência médica. O exemplo de consulta SQL a seguir demonstra como usar o FHIR `Patient` e os tipos de `Procedure` recursos para fazer isso. A consulta SQL a seguir retornará todos os pacientes e seus procedimentos relacionados encontrados em seu armazenamento HealthLake de dados.  

```
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;
```
Você pode usar o console do Athena para baixar os resultados para análise posterior ou classificá-los para entender melhor os resultados.

**Example Crie condições de filtragem para um paciente e suas prescrições relacionadas**  
É importante ver uma lista atual de medicamentos que os pacientes estão tomando. Usando o Athena, você pode escrever uma consulta SQL que usa os tipos de `MedicationRequest` recursos `Patient` e os encontrados no seu armazenamento de HealthLake dados.  
A consulta SQL a seguir une as `MedicationRequest` tabelas `Patient` e importadas para o Athena. Ele também organiza as prescrições em suas entradas individuais usando a notação de pontos.  

```
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
```
Você pode usar o console do Athena para classificar os resultados ou baixá-los para análise posterior.

**Example Veja os medicamentos encontrados no tipo `MedicationStatement` de recurso**  
O exemplo de consulta a seguir mostra como organizar o JSON aninhado importado para o Athena usando SQL. A consulta usa o `meta` elemento FHIR para indicar quando um medicamento foi adicionado pelo processamento integrado HealthLake de linguagem natural (NLP). Ele também é usado `json_extract` para pesquisar dados dentro da matriz de strings JSON. Para obter mais informações, consulte [Processamento de linguagem natural](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;
```
Você pode usar o console do Athena para baixar esses resultados ou classificá-los.

**Example Filtro para um tipo específico de doença**  
O exemplo mostra como você pode encontrar um grupo de pacientes, com idades entre 18 e 75 anos, que foram diagnosticados com diabetes.  

```
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%');
```
Agora você pode usar o console do Athena para classificar os resultados ou baixá-los para análise posterior.