- Element: Extension
-
该元素extension用于在数据存储中创建自定义字段。
此示例说明如何访问Patient资源类型中extension元素的功能。
将 HealthLake 数据存储导入 Athena 时,资源类型元素的解析方式有所不同。由于的结构element是可变的,因此无法在架构中完全指定。为了处理这种可变性,数组中的元素以字符串形式传递。
在的表描述中Patient,您可以看到extension描述为的元素array<string>,这意味着您可以使用索引值访问数组的元素。但是,要访问字符串的元素,必须使用json_extract。
这是患者表中extension元素中的一个条目。
[{
"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"
}
]
尽管这是有效的 JSON,但雅典娜仍将其视为字符串。
此 SQL 查询示例演示了如何创建包含patient-mothersMaidenName和patient-birthPlace元素的表。要访问这些元素,你需要使用不同的数组索引和 json_extract.
SELECT
extension[1],
json_extract(extension[1], '$.valueString') AS MothersMaidenName,
extension[2],
json_extract(extension[2], '$.valueAddress.city') AS birthPlace
FROM patient
要详细了解涉及 JSON 的查询,请参阅亚马逊 Athena 用户指南中的从 JSON 提取数据。
- Element: birthDate (Age)
-
年龄不是 FHIR 中患者资源类型的元素。以下是根据年龄进行筛选的两个搜索示例。
因为年龄不是一个元素,所以我们使用 SQL 查询。birthDate要查看元素是如何被摄入 FHIR 的,请在表和视图下搜索表名。你可以看到它的类型是字符串。
示例 1:计算年龄值
在此示例 SQL 查询中,我们使用内置的 SQL 工具,current_dateyear并提取这些组件。然后,我们减去它们,以名age为的列返回患者的实际年龄。
SELECT
(year(current_date) - year(date(birthdate))) as age
FROM patient
示例 2:筛选出生之前2019-01-01和出生的患者male。
SQL 查询向您展示如何使用CAST函数将birthDate元素转换为类型DATE,以及如何根据WHERE子句中的两个条件进行筛选。因为默认情况下该元素是作为字符串类型提取的,所以我们必须CAST将其作为类型DATE。然后,您可以使用<运算符将其与其他日期进行比较,2019-01-01。通过使用AND,您可以向WHERE子句中添加第二个条件。
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
-
此示例显示了对位置资源类型中城市名称为 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
-
资源类型条件存储与已上升到关注级别的问题相关的诊断数据。 HealthLake的集成医学自然语言处理 (NLP) 根据Condition资源类型中的详细信息生成新 DocumentReference 资源。生成新资源时, HealthLake 将标签附加SYSTEM_GENERATED到meta元素中。此示例 SQL 查询演示了如何搜索条件表并返回已删除SYSTEM_GENERATED结果的结果。
要了解有关 HealthLake集成自然语言处理 (NLP) 的更多信息,请参阅集成的自然语言处理 (NLP) 用于 HealthLake。
SELECT *
FROM condition
WHERE meta.tag[1] is NULL
您还可以在指定的字符串元素内进行搜索,以进一步筛选查询。该modifierextension元素包含有关使用哪个DocumentReference资源生成一组条件的详细信息。同样,你必须使用json_extract来访问以字符串形式引入 Athena 的嵌套 JSON 元素。
此示例 SQL 查询演示了如何搜索基于特定条件生成的所有内容DocumentReference。Condition用于CAST将 JSON 元素设置为字符串,以便您可以LIKE用来比较。
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
-
资源类型 “观察” 存储有关患者、设备或其他受试者的测量结果和简单断言。 HealthLake的集成自然语言处理 (NLP) 根据Observation资源中的详细信息生成新DocumentReference资源。此示例 SQL 查询包括WHERE meta.tag[1] is NULL注释掉内容,这意味着SYSTEM_GENERATED结果已包括在内。
SELECT valueCodeableConcept.coding[1].code
FROM Observation
WHERE valueCodeableConcept.coding[1].code = '266919005'
-- WHERE meta.tag[1] is NULL
此列是作为导入的struct。因此,您可以使用点表示法访问其中的元素。
- Resource type: MedicationStatement
-
MedicationStatement 是一种 FHIR 资源类型,可用于存储有关患者已服用、正在服用或将来将要服用的药物的详细信息。HealthLake的集成医学自然语言处理 (NLP) 根据MedicationStatement 资源类型中的文档生成新 DocumentReference资源。生成新资源时, HealthLake 将标签附加SYSTEM_GENERATED到meta元素。此示例 SQL 查询演示了如何创建查询,该查询使用单个患者的标识符进行筛选,并查找由HealthLake的集成 NLP 添加的资源。
SELECT *
FROM medicationstatement
WHERE meta.tag[1].display = 'SYSTEM_GENERATED' AND subject.reference = 'Patient/0679b7b7-937d-488a-b48d-6315b8e7003b';
要了解有关 HealthLake集成自然语言处理 (NLP) 的更多信息,请参阅集成的自然语言处理 (NLP) 用于 HealthLake。