Consultando HealthLake dados com SQL - AWS HealthLake

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

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 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. Criação de um armazenamento HealthLake de dados

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.

  • 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 detext.

    SELECT maritalstatus.text as MaritalStatus FROM Patient

Para saber mais sobre como acessar e pesquisar JSON, consulte Consultar JSON 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 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 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 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 dePatient, você pode ver o elemento extension descrito comoarray<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 usarjson_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 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 chamadaage.

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

Exemplo 2: Filtragem para pacientes que nasceram antes 2019-01-01 e sãomale.

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 tipoDATE. Em seguida, você pode usar o < operador para compará-lo com uma data diferente,2019-01-01. Ao usarAND, 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), consulteProcessamento de linguagem natural (NLP) integrado para HealthLake.

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íficoDocumentReference. 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 struct. 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), consulteProcessamento de linguagem natural (NLP) integrado para HealthLake.