- 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,Athena 仍會將其視為字串。
此 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 的查詢,請參閱《Amazon Athena 使用者指南》中的從 JSON 擷取資料。
- Element: birthDate (Age)
-
年齡不是 FHIR 中病患資源類型的元素。以下是根據年齡篩選的搜尋的兩個範例。
由於年齡不是 元素,因此我們會將 birthDate用於 SQL 查詢。若要查看 元素如何導入 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) 會根據 DocumentReference Condition 資源類型中找到的詳細資訊產生新資源。產生新資源時,HealthLake 會將標籤附加SYSTEM_GENERATED至 meta元素。此 SQL 查詢範例示範如何搜尋條件資料表,並傳回已移除SYSTEM_GENERATED結果的結果。
若要進一步了解 HealthLake 的整合式自然語言處理 (NLP),請參閱 HealthLake 的整合式自然語言處理 (NLP)。
SELECT *
FROM condition
WHERE meta.tag[1] is NULL
您也可以在指定的字串元素內搜尋,進一步篩選查詢。modifierextension 元素包含有關哪些DocumentReference資源用於產生一組條件的詳細資訊。同樣地,您必須使用 json_extract來存取做為字串帶入 Athena 的巢狀 JSON 元素。
此 SQL 查詢範例示範如何搜尋根據特定 Condition產生的所有 DocumentReference。使用 將 JSON 元素CAST設定為字串,以便您可以使用 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
-
資源類型 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) 會根據 DocumentReference 資源類型中找到的文件產生新的MedicationStatement」資源。產生新資源時,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),請參閱 HealthLake 的整合式自然語言處理 (NLP)。