

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

------